Mutate dplyr选择变量的第一个值

时间:2016-01-27 21:39:13

标签: r dplyr

我有一个看起来像这样的数据框

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]))

1 个答案:

答案 0 :(得分:3)

如果testdata.table

,则以下dplyr方法有效
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]