如果我理解您对一列的偏好,那么没有的可能性dplyr如下。首先,我们通过使用函数连接ele2和values列来创建新列,用冒号作为分隔符:df2paste()
new_column <- paste(-df2$ele2, df2$values, sep = ":")
然后,我们使用cbind()将其绑定到df1:
new_df1 <- cbind(df1, ele2_values = new_column)
这将为我们提供一个新的数据框,如下所示:
eleno elety resno ele2_values
1 1 N 1 -2:1.46
2 2 CA 1 -3:2.46
3 3 C 1 -4:2.86
4 4 O 1 -5:2.46
5 5 CB 1 -6:3.83
6 6 CG 1 -7:4.47
这是我使用的数据,基于您提供的数据:
df1 <- data.frame(
eleno = 1:6,
elety = c("N", "CA", "C", "O", "CB", "CG"),
resno = rep(1, 6)
)
df2 <- data.frame(
eleno = rep(1, 6),
ele2 = 2:7,
values = c(1.46, 2.46, 2.86, 2.46, 3.83, 4.47)
)
如果我们想将此列作为每个点的单个元素,我们可以通过以下方式修改我们的代码:
实例new_column化为空向量:
new_column <- vector()
然后调用一些变体*apply()或使用 for 循环来逐点对原始数据帧进行子集化,同时应用我们的原始代码并将我们的单数字符元素附加回new_column:
lapply(unique(df2$eleno), FUN = function(x) {
subset <- subset(df2, eleno == x)
new_elem <- paste(-subset$ele2, subset$values, sep = ":", collapse = ", ")
new_column <<- c(new_column, new_elem)
})
一旦这个操作完成,我们cbind()像以前一样使用绑定new_column到df1:
new_df1 <- cbind(df1, ele2_values = new_column)
我们的输出如下,
eleno elety resno ele2_values
1 1 N 1 -2:1.13703411305323, -3:6.22299404814839, -4:6.09274732880294, -5:6.23379441676661, -6:8.60915383556858, -7:6.40310605289415
2 2 CA 1 -2:0.094957563560456, -3:2.32550506014377, -4:6.66083758231252, -5:5.14251141343266, -6:6.93591291783378, -7:5.44974835589528
3 3 C 1 -2:2.82733583590016, -3:9.23433484276757, -4:2.92315840255469, -5:8.37295628152788, -6:2.86223284667358, -7:2.66820780001581
4 4 O 1 -2:1.86722789658234, -3:2.32225910527632, -4:3.16612454829738, -5:3.02693370729685, -6:1.59046002896503, -7:0.399959180504084
5 5 CB 1 -2:2.18799541005865, -3:8.10598552459851, -4:5.25697546778247, -5:9.14658166002482, -6:8.3134504687041, -7:0.45770263299346
6 6 CG 1 -2:4.56091482425109, -3:2.65186671866104, -4:3.04672203026712, -5:5.0730687007308, -6:1.81096208281815, -7:7.59670635452494
这是我在这种情况下使用的随机数据:df2
set.seed(1234)
df2 <- data.frame(
eleno = rep(1:6, rep(6, 6)),
ele2 = 2:7,
values = runif(length(rep(1:6, rep(6, 6)))) * 10
)