我有五个data.frames,其中包含不同样本集的基因表达数据.我在每个data.set中有不同的行数,因此只有部分重叠的row.names(基因).
现在我希望a)过滤五个data.frames以仅包含所有data.frames中存在的基因和b)将这些基因的基因表达数据组合到一个data.frame.
我到目前为止所能找到的只是合并,但这只能合并两个data.frames,所以我必须多次使用它.有没有更简单的方法?
如果要排除每个数据框中不存在的行名,则合并效率不高.这是一个不同的提案.
首先,三个示例数据框:
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
Run Code Online (Sandbox Code Playgroud)
将数据框放入列表:
dfList <- list(df1, df2, df3)
Run Code Online (Sandbox Code Playgroud)
查找常见的行名称:
idx <- Reduce(intersect, lapply(dfList, rownames))
Run Code Online (Sandbox Code Playgroud)
提取数据:
df1[idx, ]
a b
c 3 3
e 5 5
Run Code Online (Sandbox Code Playgroud)
PS.如果要保留所有数据框中的相应行,可以df1[idx, ]使用以下命令替换最后一步:
do.call(rbind, lapply(dfList, "[", idx, ))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4884 次 |
| 最近记录: |