r - 组合具有重复值和 NA 的行 [不使用 tidyverse]
问题描述
我有一个数据框,每个 ID 有多行。我想组合这些行以获得每个 ID 的 1 行,并组合可以是 anumber
或NA
(我想忽略)的相应值。
我不确定我可以在这里使用 aggregate() ;通常,如果有一个值不是,我希望将列(V1-V4)中的每个 ID 值设置为一个数字NA
。
输入:
ID V1 V2 V3 V4
1 04C 6 NA NA 9
2 04C NA 9 NA 9
3 0F0 NA 5 NA 4
4 0F0 NA NA 7 4
5 0F0 NA 5 7 NA
6 167 8 NA NA NA
7 167 8 10 5 NA
8 167 8 10 NA NA
9 167 8 NA 5 NA
10 2D7 3 3 NA 1
输出:
ID V1 V2 V3 V4
1 04C 6 9 NA 9
2 0F0 NA 5 7 4
3 167 8 10 5 NA
4 2D7 3 3 NA 1
我想出了一个解决方案,不幸的是它很慢,但至少它避免了创建一个小问题。
for(i in 2:nrow(df)) {
row0 <- df[i-1,1]
row1 <- df[i,1]
if (row0==row1) {
for(j in 2:5) {
if (is.na(df[i,j])) {
df[i,j] <- df[i-1,j]
}
}
df[i-1,1] <- "NA"
}
}
dfclean <- subset(df, V0!="NA")
解决方案
一种tidyverse
可能是:
df %>%
gather(var, val, -ID, na.rm = TRUE) %>%
group_by(ID, var) %>%
distinct(val) %>%
spread(var, val)
ID V1 V2 V3 V4
<chr> <int> <int> <int> <int>
1 04C 6 9 NA 9
2 0F0 NA 5 7 4
3 167 8 10 5 NA
4 2D7 3 3 NA 1
推荐阅读
- azure - 必应新闻搜索 API Json 响应 url 参数
- javascript - 尝试通过 Node.js 使用 Firebase 发送通知时出现 ReferenceError
- git - 使用 git 提交时设置 vim 默认语言
- python - 在 keras 损失函数中使用 tensorflow.py_func
- php - 捕获组或什么都没有
- javascript - 从当前关注的文本区域记录值
- vue.js - v-for 使用大括号查找
- c# - 基于参数类型的泛型参数和约定中的协方差
- python-2.7 - 如何克服此错误“TypeError: unsupported operand type(s) for -: 'float' and 'instancemethod'”
- c# - 从 WPF 应用程序拍照和录制多媒体文件