r - 如何匹配模式不同的三列?
问题描述
我有与以下类似的数据(但更大):
example <- rbind(data.frame(species = "A", trait1 = "yes", trait2 = NA),
data.frame(species = "A", trait1 = NA, trait2 = "yes"),
data.frame(species = "B", trait1 = NA, trait2 = "no"),
data.frame(species = "B", trait1 = "yes", trait2 = NA),
data.frame(species = "B", trait1 = "no", trait2 = NA),
data.frame(species = "B", trait1 = "no", trait2 = NA),
data.frame(species = "C", trait1 = NA, trait2 = "no"),
data.frame(species = "C", trait1 = "no", trait2 = NA),
data.frame(species = "D", trait1 = "yes", trait2 = NA),
data.frame(species = "D", trait1 = NA, trait2 = "yes"),
data.frame(species = "E", trait1 = NA, trait2 = "no"),
data.frame(species = "E", trait1 = "no", trait2 = NA),
data.frame(species = "E", trait1 = "no", trait2 = NA))
在这里,trait2 是一个固定值(1 个物种的 1 个值),但 trait1 在物种内是可变的。对于每个性状值,物种的数据来自不同的行。在数据管理之后,我想保持 trait1 中存在的可变性,这似乎使过程有点复杂。
最后,我想将 R 中的这个数据框转换为以下数据框:
ex.res <- rbind(data.frame(species = "A", trait1 = "yes", trait2 = "yes"),
data.frame(species = "B", trait1 = "yes", trait2 = "no"),
data.frame(species = "B", trait1 = "no", trait2 = "no"),
data.frame(species = "B", trait1 = "no", trait2 = "no"),
data.frame(species = "C", trait1 = "no", trait2 = "no"),
data.frame(species = "D", trait1 = "yes", trait2 = "yes"),
data.frame(species = "E", trait1 = "no", trait2 = "no"),
data.frame(species = "E", trait1 = "no", trait2 = "no"))
我尝试了很多东西,包括 R 中的一些基本数据管理工具,还有duplicated
, unique
, 和match_df
函数,但他们并没有完全做到这一点。
也许可以使用此类功能的组合版本,但我无法做到这一点。有什么简单的方法吗?
解决方案
一种使用基础 R 的方法,
first_part <- example[!is.na(example$trait1),]
second_part <- example[!is.na(example$trait2),]
merge(first_part[,-3], second_part[,-2], by="species")
species trait1 trait2
1 A yes yes
2 B yes no
3 B no no
4 B no no
5 C no no
6 D yes yes
7 E no no
8 E no no
推荐阅读
- makefile - nvcc 不支持的 gpu 致命
- python - 如何从脚本中覆盖 hydra 工作目录?
- azure - Azure PowerShell - 从所有订阅中获取 VM 使用情况
- javascript - 尝试滑动上一个和下一个图像时出错
- android - Room DB 使用 @Relation 将表 A 连接到表 B 和 B 到 C
- javascript - 动态确定下一个和上一个相似的日期范围
- javascript - 如何使用 Webpack 和 React 预加载 css?
- ios - Xcode 似乎对函数所需的参数类型感到困惑
- r - For 循环适用于初学者 - 它如何在 R 中更好地工作?
- java - 如何递归地添加4个或更多数字?