首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅使用通用row.names在R中组合data.frames

仅使用通用row.names在R中组合data.frames
EN

Stack Overflow用户
提问于 2013-05-29 15:50:27
回答 2查看 5.7K关注 0票数 1

我有五个不同样本集的基因表达数据的data.frames。我在每个data.set中有不同的行数,因此只有部分重叠的row.names (基因)。

现在,我希望a)过滤这五个data.frames,使其只包含所有data.frames中存在的基因,以及b)将这些基因的基因表达数据组合到一个data.frame中。

到目前为止,我只能找到merge,但它只能合并两个data.frames,所以我必须多次使用它。有没有更简单的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-29 16:33:07

如果您想要排除并非在每个数据框中都存在的行名,则合并效率不是很高。这里有一个不同的建议。

首先,三个示例数据帧:

代码语言:javascript
复制
df1 <- data.frame(a = 1:5, b = 1:5, 
                  row.names = letters[1:5]) # letters a to e
df2 <- data.frame(a = 1:5, b = 1:5, 
                  row.names = letters[3:7]) # letters c to g
df3 <- data.frame(a = 1:5, b = 1:5, 
                  row.names = letters[c(1,2,3,5,7)]) # letters a, b, c, e, and g
# row names being present in all data frames: c and e

将数据帧放入列表中:

代码语言:javascript
复制
dfList <- list(df1, df2, df3)

查找常用行名:

代码语言:javascript
复制
idx <- Reduce(intersect, lapply(dfList, rownames))

提取数据:

代码语言:javascript
复制
df1[idx, ]

  a b
c 3 3
e 5 5

PS。如果您希望保留所有数据帧中的相应行,则可以使用以下命令替换最后一步df1[idx, ]

代码语言:javascript
复制
do.call(rbind, lapply(dfList, "[", idx, ))
票数 5
EN

Stack Overflow用户

发布于 2013-05-29 16:11:17

查看this SO post中最上面的答案。只需列出您的数据框并应用以下代码行:

代码语言:javascript
复制
Reduce(function(...) merge(..., by = "x"), list.of.dataframes)

您只需调整by参数,以指定数据框应按哪个公共列合并。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16808269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档