r - 将两个数据框折叠成一个,其中条目被连接起来
问题描述
我有两个具有相同 row.names 和 colnames 的数据框。但是,每个字段中的条目在两个 data.frame 之间有所不同。
像下面的结构:
df1 = data.frame(SETD2 = c('AMP', NA, ''), PIK3CA = c('', 'AMP', 'AMP'))
row.names(df1) = c('Sample1', 'Sample2', 'Sample3')
df2 = data.frame(SETD2 = c('', 'Nonstop', 'truncating'), PIK3CA = c('nonsense', 'InFrame', ''))
row.names(df2) = c('Sample1', 'Sample2', 'Sample3')
我只是在寻找一种简单的解决方案,将这两个数据帧合并为一个数据帧,其中所需的输出看起来像
df3 = data.frame(SETD2 = c('AMP;', 'NA;NonStop', 'truncating'), PIK3CA = c('nonsense', 'AMP;InFrame', 'AMP;')
如您所见,只是各个条目被合并并由
';'
非常感谢,克里斯。
解决方案
这些仅使用基数 R。
1)我们首先使用Map
两个paste
数据框给出列表L
,然后replace
将df1
条目转换L
为数据框。
L <- Map(function(...) paste(..., sep = ";"), df1, df2)
replace(df1, TRUE, L)
或者将最后一行替换为:
out <- df1
out[] <- L
或者这样:
as.data.frame(L, row.names = rownames(df1))
在每种情况下,我们都会得到:
SETD2 PIK3CA
Sample1 AMP; ;nonsense
Sample2 NA;Nonstop AMP;InFrame
Sample3 ;truncating AMP;
2)另一种方法是将df1
和都转换df2
为矩阵,因为它们可以并行粘贴。我们将它们粘贴在一起给出字符向量p
,然后使用replace
or out[]<-
,如(1)。此替代方案不使用Map
或类似。
p <- paste(as.matrix(df1), as.matrix(df2), sep = ";")
replace(df1, TRUE, p)
或将上面的最后一行替换为:
out <- df1
out[] <- p
推荐阅读
- azure - Windows 10(本地)和 Azure 上的 Windows Server 2016 之间的连接问题
- web-scraping - 使用代理进行 Java Web 抓取
- docker - 你喜欢如何为大型项目组织 docker-compose.yml?
- node.js - Fs.readFile 返回未定义
- sql-server - 更快的 I/O 可以减少索引中的页面拆分吗?
- python - 如何使用熊猫读取其中项目是引用的文本文件
- android - 连接到BLE后获取最后收到的数据?
- kotlin - 为什么 Kotlin Lambda 函数在调用时不执行?
- c# - Multiple fixture instances
- python - 使用字典查找样式访问 numpy,但保留 numpy 数组操作