如何合并数据集,其中键位于一个数据集的列上,另一个数据集的行位于R中?
示例数据:
group = c("a", "b", "c", "c")
id1 = c(1, 0, 0, 0) 
id2 = c(0, 1, 0, 1)
id3 = c(0, 0, 1, 0) 
df1 = data.frame(group,id1, id2, id3) 
df1
id = c("id1", "id2", "id3") 
iv1 = c(2, 3, 3) 
iv2 = c(3, 2, 3) 
df2 = data.frame(id, iv1, iv2) 
df2我喜欢通过ids合并这两个数据集。如果我能做到的话:
df1$iv1 = ifelse(df1$id1 == 1, 2, 3)
df1$iv2 = ifelse(df1$id2 == 1, 2, 3)其结果是:
  group id1 id2 id3 iv1 iv2
1     a   1   0   0   2   3
2     b   0   1   0   3   2
3     c   0   0   1   3   3
4     c   0   1   0   3   2如果说我有1000个变量要合并的话,那么ifelse的方式将是乏味的。是否有更有效的方法来合并像这样的数据集?
发布于 2016-11-08 21:14:18
皮埃尔和伊斯雷尔的回答都很好。对于这种更复杂的操作,您还可以使用Hadley Wickham的流行tidyr包:
install.packages('tidyr', repos='http://cran.rstudio.org')
library(tidyr)
g1 <- gather(df1, idx, id_val, -group)  # colnames are in 'idx'; 12 rows total
g1 <- g1[g1$id_val==1, ]                # drop rows with id_val == 0
g2 <- merge(g1, df2, by.x='idx', by.y='id')
g3 <- spread(g2, idx, id_val)           # pivot the 'idx' column back out
g3
#   group iv1 iv2 id1 id2 id3
# 1     a   2   3   1  NA  NA
# 2     b   3   2  NA   1  NA
# 3     c   3   2  NA   1  NA
# 4     c   3   3  NA  NA   1
g3[is.na(g3)] <- 0
g3
#   group iv1 iv2 id1 id2 id3
# 1     a   2   3   1   0   0
# 2     b   3   2   0   1   0
# 3     c   3   2   0   1   0
# 4     c   3   3   0   0   1https://stackoverflow.com/questions/40495316
复制相似问题