r - 如何将两行中的信息与几乎相同的名称组合起来
问题描述
我的数据框包含许多名称几乎相同的列,例如 A 和 A...1 、 B 和 B...1 等等。我想将这些列合并,例如 A 和 A...1 成为一列。所有这些列都包含 0,1 或 NA,NA:s 应被视为零 (0)。因此,如果 A 列是 0,0,1,1,NA 并且 A...1 列是 1,0,0,0,1,combined_A 应该 = 1,0,1,1,1。因此,如果这些列元素中的任何一个在其他列中为 1,则它们应该在组合列中为 1。
这是一些生成示例的代码
original_table <- data.frame(A = c(0,0,1,1,NA),B = c(1,1,NA,NA,1),A...1 = c(1,0,0,0,1),B...1 = c(0,1,0,1,1))
所以原来的表是这样的
A B A...1 B...1
0 1 1 0
0 1 0 1
1 NA 0 0
1 NA 0 1
NA 1 1 1
合并后所需的输出表将如下所示。
combined_table <- data.frame(combined_A = c(1,0,1,1,1),combined_B = c(1,1,0,1,1))
combined_A combined_B
1 1
0 1
1 0
1 1
1 1
我对 R 相当熟悉,但我找不到任何关于这个问题的帮助。
解决方案
我们可以使用split.default
基于列名中的公共部分进行拆分。在这个例子中,我们似乎可以通过提取每个列名的第一个字母来找到常见的列。
substr(names(original_table), 1, 1)
#[1] "A" "B" "A" "B"
我们使用它来拆分列,并在每个组中使用pmax
来获取每行删除的最大值NA
as.data.frame(lapply(split.default(original_table,
substr(names(original_table), 1, 1)), function(x)
do.call(pmax, c(x, na.rm = TRUE))))
# A B
#1 1 1
#2 0 1
#3 1 0
#4 1 1
#5 1 1
推荐阅读
- visual-studio-code - 正则表达式匹配 = object 和 (
- python-3.x - Python将单个字符串元素与多个字符串元素结合起来
- ios - 如何使用swift向haishinkit添加多个音频输入(CMSampleBuffer)?
- git - NPM 安装/更新:无需使用 Git 存储库更改 package.json 即可获取最新版本
- c++ - 如何在 C++ 中编写随机大写字符生成器?
- spring - DefaultJmsListenerContainer 使用 BeanFactoryPostProcessor
- c# - 事件处理程序更新属性时 WPF 绑定不起作用
- antlr - Antlr 生成的文件
- c++ - 如何计算包含位集字段的结构的大小
- spring - spring-cloud-loabalancer 配置静态服务器列表