我有一个数据框,其中一列有一些缺失值。 我想复制缺少值N次的行,其中N是包含缺失值替换的向量的长度。
我首先定义一个替换向量,然后是我的起始data.frame,然后是我想要的结果,最后我尝试解决它。不幸的是,这不起作用......
> replace_values <- c('A', 'B', 'C')
> data.frame(value = c(3, 4, NA, NA), result = c(5, 3, 1,2))
value result
1 3 5
2 4 3
3 NA 1
4 NA 2
> data.frame(value = c(3, 4, replace_values, replace_values), result = c(5, 3, rep(1, 3),rep(2, 3)))
value result
1 3 5
2 4 3
3 A 1
4 B 1
5 C 1
6 A 2
7 B 2
8 C 2
> t <- data.frame(value = c(3, 4, NA, NA), result = c(5, 3, 1,2))
> mutate(t, value = ifelse(is.na(value), replace_values, value))
value result
1 3 5
2 4 3
3 C 1
4 A 2
答案 0 :(得分:2)
您可以尝试tidyverse
解决方案
d %>%
mutate(value=ifelse(is.na(value), paste0(replace_values, collapse=","), value)) %>%
separate_rows(value, sep=",") %>%
select(value, everything())
value result
1 3 5
2 4 3
3 A 1
4 B 1
5 C 1
6 A 2
7 B 2
8 C 2
我们的想法是用NA
替换,
- 折叠&#39; replace_values&#39;。然后将拼写的值分开,并使用tidyr
separate_rows
函数按行绑定它们。最后根据您的预期输出对data.frame
进行排序。
答案 1 :(得分:1)
我们可以使用rbind
在此处base R
。创建一个逻辑向量,其中'value'是NA('i1'),通过获取它的sum
获得NA元素的数量('n'),通过{{1}创建data.frame
将'replace_values'与'n'以及'result'元素相对应的'result'元素通过'{1}}'replace_values'和'rbind'与数据集的子集对应' 'value'行的非NA元素
rep