Welcome to Qi-U Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
346 views
in Technique[技术] by (71.8m points)

Select first non-NA value using R

df<-data.frame(ID = c(1,1,1,2,3,3,3),
          test = c(NA, 5.5, 6.4, NA, 7.3, NA, 10.9))

I want to create a variable called "value", which is the first non-NA value for the test for each individual ID. For individual ID 2 who only has the NA, the value is NA.

The expected output is:

df<-data.frame(ID = c(1,1,1,2,3,3,3),
           test = c(NA, 5.5, 6.4, NA, 7.3, NA, 10.9),
           value = c(5.5, 5.5, 5.5, NA, 7.3, 7.3, 7.3))

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

Please log in or register to answer this question.

1 Answer

0 votes
by (71.8m points)

We can use first on the non-NA elements after grouping

library(dplyr)
df <- df %>%
    group_by(ID) %>% 
    mutate(value = first(test[complete.cases(test)]))

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Qi-U Community for programmer and developer-Open, Learning and Share
...