我有一个看起来像这样的数据框
test<-data.frame(x=c(100,100,101,101,102,102),y=c(1,2,1,2,1,2),z=c(NA,NA,0.1,NA,NA,0.5))
我想按x分组。然后创建一个新变量ynew,在那里我将看z并选择第一个不是NA的值,然后设置ynew = y。如果z中的两个值都是NA,那么我希望ynew为NA。 ynew应该是NA,NA,1,1,2,2。我正在尝试使用dplyr。
我坚持使用以下
group_by(test,x) %>% mutate(ynew=ifelse(all(is.na(z)),NA_integer_,y[corresponding index]))
答案 0 :(得分:3)
如果test
是data.table
library(data.table)
test <- data.table(test)
test %>% group_by(x) %>% mutate(ynew = first(y[!is.na(z)]))
# Source: local data table [6 x 4]
# x y z ynew
# (dbl) (dbl) (dbl) (dbl)
#1 100 1 NA NA
#2 100 2 NA NA
#3 101 1 0.1 1
#4 101 2 NA 1
#5 102 1 NA 2
#6 102 2 0.5 2
或者您可以简单地使用data.table
方式
test[, ynew := y[!is.na(z)], x]