Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.4k 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

1 Reply

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...