【发布时间】:2015-05-06 12:03:49
【问题描述】:
我有一个名为 one 的数据集,有四列:D1、D2、D3 和 D4。 D1 是 ID。 D2 有七个级别(a、b、c、d、e、f、g)。 D3 缺少数据,我想通过匹配列 D2 和 D4 的条件来填充这些数据。我从列D4 中选择对应于D2 列的四个级别(a、c、d、e)的值,然后用来自@ 的值替换列D3 的缺失值987654345@。
D1 D2 D3 D4
1 a . 5
2 c 12 6
3 e . 3
4 b . 7
5 f . 8
6 e . 9
7 e 11 8
8 c . 3
9 c 52 5
10 a . 6
11 b 4 7
12 f . 2
13 f . 10
14 d . 12
15 d . 13
16 e . 24
17 a 1 54
18 b 2 19
19 c 5 21
我有以下解决方案,但它不起作用。有什么建议或帮助吗?谢谢。
index <- with(one, D2 %in% c('a','c','d','e'))
one$D4[index] <- one$D3[index]
one
【问题讨论】:
-
描述有点不清楚。如果 D2 在 (a, c, d, e) 中,是否要用 D4 中的值填充 D3 中的缺失值?这就是我从问题的第一部分所理解的,但问题的后半部分和代码实际上是将 NA 添加到 D4。也许,告诉我们 D3 和 D4 对于第 1、4 和 17 行的期望结果是什么。
-
您的
.应该是 NA,否则 D3 将是字符串/因子。这是否符合您的要求,我不确定with(df, ifelse(is.na(D3) & D2 %in% letters[1:5], D4, D3)) -
你能提供一些例子吗?例如,D3 中的第一个缺失值是什么?为什么?
标签: r if-statement na