【发布时间】:2019-03-15 13:07:35
【问题描述】:
我的问题是关于在 data.frame 中的每对组之间执行计算,我希望它更加矢量化。
我有一个包含以下列的 data.frame:Location、Sample、Var1 和 Var2。我想为Var1 和Var2 的每对Locations 找到每个Sample 的壁橱匹配项。
我可以为一对这样的位置完成此操作:
df0 <- data.frame(Location = rep(c("A", "B", "C"), each =30),
Sample = rep(c(1:30), times =3),
Var1 = sample(1:25, 90, replace =T),
Var2 = sample(1:25, 90, replace=T))
df00 <- data.frame(Location = rep(c("A", "B", "C"), each =30),
Sample = rep(c(31:60), times =3),
Var1 = sample(1:100, 90, replace =T),
Var2 = sample(1:100, 90, replace=T))
df000 <- rbind(df0, df00)
df <- sample_n(df000, 100) # data
dfl <- df %>% gather(VAR, value, 3:4)
df1 <- dfl %>% filter(Location == "A")
df2 <- dfl %>% filter(Location == "B")
df3 <- merge(df1, df2, by = c("VAR"), all.x = TRUE, allow.cartesian=TRUE)
df3 <- df3 %>% mutate(DIFF = abs(value.x-value.y))
result <- df3 %>% group_by(VAR, Sample.x) %>% top_n(-1, DIFF)
我尝试了其他可能性,例如使用dplyr::spread,但无法避免“错误:行的重复标识符”或半填充为 NA 的列。
对于每个可能的组对,是否有更简洁和自动化的方法来执行此操作?我想避免每对的手动子集和合并例程。
【问题讨论】: