【发布时间】:2016-11-28 19:51:32
【问题描述】:
编辑:我了解合并多个数据框的问题之前已被问过,但我被困在如何合并多个表而不首先转换为数据框,更简洁。如果您想了解如何合并多个数据框,请查看出色的答案here(也在下面链接)。
所以我已经有一种方法可以在 R 中合并多个数据帧,但我希望有人可以帮助我找到一种更优雅的方法。这是我拥有的代码示例。鉴于 df1、df2 和 df3 是具有相同列(包括列名“类”)但行数不同的数据帧,我可以这样做:
table1 <- table(df1$class)
table2 <- table(df2$class)
table3 <- table(df3$class)
按照this 的回答,我可以合并它们:
merged.table <- Reduce(function(...) merge(..., all=T), list(table1, table2, table3))
我的问题是合并不正确,因为对象 table1、table2 和 table3 具有相同的标识名称,merged.table 最终将数据合并到一列。
我的解决方法是将表格转换为数据框,如下所示:
table1 <- as.data.frame(table(df1$class))
colnames(table1) <- c("ID","counts1")
table2 <- as.data.frame(table(df2$class))
colnames(table2) <- c("ID","counts2")
table3 <- as.data.frame(table(df3$class))
colnames(table3) <- c("ID","counts3")
然后合并工作正常。但是让我告诉你,一段时间后这会变得非常笨重和乏味,我需要经常做这种事情。
有没有什么方法可以在不将表格转换为数据框并分配列名的情况下实现相同的目标?
以下是数据框的示例,为简单起见已截断:
transcript <- rep(c("a","b","c","d","e","f"))
family <- rep(c("L1","L2","ERV"),2)
class <- rep(c("LINE","LINE","LTR"),2)
df1 <- data.frame(transcript, family, class)
transcript family class
a L1 LINE
b L2 LINE
c ERV LTR
d L1 LINE
e L2 LINE
f ERV LTR
【问题讨论】:
-
太棒了!
by="Var1"技巧效果很好。你能把它作为答案留下来让我接受吗?