【发布时间】:2019-11-30 12:09:38
【问题描述】:
我想替换特定子组中观察值的 NA 值,但该组中的观察顺序未正确排序。所以我想知道是否存在一些dplyr 或plyr 命令允许我使用来自另一个数据帧的同一列中的值替换属于一个数据帧的列中的缺失值,同时匹配该“键”的值"列。
这就是我得到的。希望有人可以阐明这一点。谢谢。
## data frame that contains missing values in "diff" column
df <- data.frame(type = c(1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3),
diff = c(0.1, 0.3, NA, NA, NA, NA, NA, 0.2, 0.7, NA, 0.5, NA),
name = c("A", "B", "C", "D", "E", "A", "B", "C", "F", "A", "B", "C"))
## replace with values from this smaller data frame
df2 <- data.frame(diff_rep = c(0.3, 0.2, 0.4), name = c("A", "B", "C"))
## replace using ifelse
df$diff <- ifelse(is.na(df$diff) & (df$type == 2), df2$diff_rep , df$diff)
df
type diff name
1 1 0.1 A
2 1 0.3 B
3 1 NA C
4 2 0.3 D
5 2 0.2 E
6 2 0.4 A
7 2 0.3 B
8 2 0.2 C
9 2 0.7 F
10 3 NA A
11 3 0.5 B
12 3 NA C
## desired output
type diff name
1 1 0.1 A
2 1 0.3 B
3 1 NA C
4 2 NA D
5 2 NA E
6 2 0.3 A
7 2 0.2 B
8 2 0.4 C
9 2 0.7 F
10 3 NA A
11 3 0.5 B
12 3 NA C
【问题讨论】:
-
你能解释一下这些值是如何被替换的吗?我不清楚。我还看到第 9 行
0.7被替换为NA。 -
还有什么是
## replace using ifelse部分?它是你原来的df的一部分吗? -
我的意思是
type2 的 D E F 应该导致不匹配。它们应该在下面看起来像我想要的输出。 -
@Ronak,
df是实现itelse()后的新数据框。 -
那么当
A和B出现在df2中时,为什么A和C有NAfortype3?C中的type1 相同吗?
标签: r if-statement replace dplyr na