我想根据公共列的匹配({{}}更新数据框d_sub
,其中包含两个新列x
,y
(并排除列xy
)父数据框treatment
中的{1}},replicate
}。
d
与普通set.seed(0)
x <- rep(1:10, 4)
y <- sample(c(rep(1:10, 2)+rnorm(20)/5, rep(6:15, 2) + rnorm(20)/5))
treatment <- sample(gl(8, 5, 40, labels=letters[1:8]))
replicate <- sample(gl(8, 5, 40))
d <- data.frame(x=x, y=y, xy=x*y, treatment=treatment, replicate=replicate)
d_sub <- d[sample(nrow(d),6),4:5]
d_sub
# treatment replicate
# 32 b 2
# 11 h 7
# 9 h 3
# 20 e 3
# 10 b 5
# 7 d 3
或其他方法mentioned here不同,我只需要提取几个列,如下面的预期输出所示:
merge
请注意,此处输出中排除了# treatment replicate x y
# 32 b 2 2 8.998847
# 11 h 7 1 5.082928
# 9 h 3 2 7.050445
# 20 e 3 10 10.145350
# 10 b 5 10 7.941056
# 7 d 3 7 6.814287
列!在我最初的问题中,输出中有数千列我不需要的列,而不是所需的极少列。我特别想找xy
以外的其他方法来了解我是否能以一种以内存效率的方式实现解决方案。
答案 0 :(得分:1)
我想之前已经问过这个,但你要找的是:
merge(d_sub, d, by=c("treatment", "replicate"))
或:
d_sub <- merge(d_sub, d, by=c("treatment", "replicate"))