编辑:我知道之前已经问过合并多个数据帧的问题,但为了更简洁,我一直坚持如何合并多个表而不首先转换为数据帧。如果您想了解如何合并多个数据框,请参阅此处的精彩答案(也有链接在下面)。
所以我已经有一种方法可以在 R 中合并多个数据帧,但我希望有人可以帮助我找到一种更优雅的方法。这是我拥有的有效代码示例。鉴于 df1、df2 和 df3 是具有相同列(包括列名称“class”)但行数不同的数据框,我可以这样做:
table1 <- table(df1$class)
table2 <- table(df2$class)
table3 <- table(df3$class)
Run Code Online (Sandbox Code Playgroud)
正如这个答案所给出的,我可以合并它们:
merged.table <- Reduce(function(...) merge(..., all=T), list(table1, table2, table3))
Run Code Online (Sandbox Code Playgroud)
我的问题是合并不正确,因为对象 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")
Run Code Online (Sandbox Code Playgroud)
然后合并就可以正常工作了。但让我告诉你,一段时间后这会变得非常笨重和乏味,而且我需要经常做这种事情。
有没有办法在不将表转换为数据框并分配列名的情况下实现相同的目标?
以下是数据框的示例,为了简单起见,进行了截断:
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 …Run Code Online (Sandbox Code Playgroud) 所以我试图转换一组矩阵格式的数据,就像这样
V1 V2 V3 V4
1 12 32 12 54
2 43 34 23 24
3 43 23 65 54
Run Code Online (Sandbox Code Playgroud)
其中1-3是seqID,V1-4是ID
我希望以一种更容易让SPSS理解的格式,如下所示:
ID seqID Value
1 1 12
2 1 32
3 1 12
4 1 54
1 2 43
Run Code Online (Sandbox Code Playgroud)
等等
R中最好的方法是什么?它应该是一些简单的文本操作,我尝试制作一个循环来解决它(例如通过提取列,然后再次绑定值)但不知何故循环语法仍然逃避我!帮助赞赏!