我想在给定现有值的情况下为变量计算缺失值。
在var2
中,我们注意到有很多NA
个。
var2
的值相同。var2
的值,就像id == 2那样,那么我们只输出NA
。它应该从df_old
到df_new.
df_old<- read.table(header = TRUE, text = "
id var1 var2
1 A 12
1 B NA
1 E NA
2 G NA
2 J NA
")
df_new<- read.table(header = TRUE, text = "
id var1 var2
1 A 12
1 B 12
1 E 12
2 G NA
2 J NA
")
我试过了:
df_new<-df_old %>%
group_by(id) %>%
mutate(var2=na.omit(var2))
我认为由于第二种情况,它不起作用。我也想知道使用ifelse是否合适。需要帮助谢谢!
答案 0 :(得分:4)
如果每个var2
只有一个id
值,您可以这样做:
df_old %>%
group_by(id) %>%
mutate(var2 = min(var2, na.rm = TRUE))
Source: local data frame [5 x 3]
Groups: id [2]
id var1 var2
<int> <fctr> <int>
1 1 A 12
2 1 B 12
3 1 E 12
4 2 G NA
5 2 J NA
另一种选择是:
mutate(var2 = var2[1])
答案 1 :(得分:1)
我们可以使用data.table
,但与dplyr
不同,对于拥有所有NA的群组,我们必须指定要返回的NA
,否则它会提供Inf
library(data.table)
setDT(df_old)[, var2 := if(any(!is.na(var2))) min(var2, na.rm = TRUE)
else NA_integer_, by = id]
df_old
# id var1 var2
#1: 1 A 12
#2: 1 B 12
#3: 1 E 12
#4: 2 G NA
#5: 2 J NA
答案 2 :(得分:0)
到目前为止,CRAN中有可用的tidyimpute软件包,看来可以解决问题了
“用于在表和列表中插入缺失值(NA)的函数和方法 仿照“ dplyr”和“ rlang”的整理方法;与...合作 data.tables。”
https://cran.r-project.org/web/packages/tidyimpute/tidyimpute.pdf