我有以下三个dataframes:合并的数据帧,并结合列到一个
df1 <- data.frame(name=c("John", "Anne", "Christine", "Andy"),
age=c(31, 26, 54, 48),
height=c(180, 175, 160, 168),
group=c("Student",3,5,"Employer"), stringsAsFactors=FALSE)
df2 <- data.frame(name=c("Anne", "Christine"),
age=c(26, 54),
height=c(175, 160),
group=c(3,5),
group2=c("Teacher",6), stringsAsFactors=FALSE)
df2 <- data.frame(name=c("Christine"),
age=c(54),
height=c(160),
group=c(5),
group2=c(6),
group3=c("Scientist"), stringsAsFactors=FALSE)
我想将它们结合起来,使我得到以下结果:
df.all <- data.frame(name=c("John", "Anne", "Christine", "Andy"),
age=c(31, 26, 54, 48),
height=c(180, 175, 160, 168),
group=c("Student", "Teacher", "Scientist", "Employer"))
在我做这样的时刻:
df.all <- merge(merge(df1[,c(1,4)], df2[,c(1,5)], all=TRUE, by="name"),
df3[,c(1,6)], all=TRUE, by="name")
row.ind <- which(df.all$group %in% c(6,5))
df.all[row.ind, c("group")] <- df.all[row.ind, c("group2")]
row.ind2 <- which(df.all$group2 %in% c(6))
df.all[row.ind2, c("group")] <- df.all[row.ind2, c("group3")]
这不是普遍意义,它是非常的混乱。也许有一种方法可以在合并步骤中使用merge_all
或merge_recurse
(尤其是可能有两个以上的数据帧合并),但我还没有弄清楚如何实现。这两个不会产生正确的结果:
df.all <- merge_all(list(df1, df2, df3))
df.all <- merge_recurse(list(df1, df2, df3), by=c("name"))
是否有更通用和更优雅的方法来解决此问题?
谢谢,这个作品!我习惯了'reshape'软件包,以至于我真的很惊讶你能用'R'实现的功能。还要感谢'as.numeric()'部分的解释。 – AnjaM
不错的使用减少 – zach