如何用另一行的信息补充一行?

时间:2019-11-12 16:34:12

标签: r

我有以下问题。我有以下形式的R中的数据框。

df <- data.frame(id=c(1,1,1,1,2,2,2,2,3,3,3,3),
                 question=c("Who is your favorite singer?",NA,NA,NA,"Who is your favorite actor?", NA, NA, NA, "Who is your favorite athlete?", NA, NA, NA),
                 answer=c(NA,"Michael Jackson","Taylor Swift","Celine Dion", NA, "Brad Pitt", "Julia Roberts", "Hugh Grant", NA, "Michael Jordan", "Dirk Nowitzki", "Mike Tyson"))

我需要更改数据框,以便用具有相同ID的行中的问题替换NA值,并且可以删除仅包含有关该问题的信息的行。这意味着:

df_neu <- data.frame(id=c(1,1,1,2,2,2,3,3,3),
                     question=c("Who is your favorite singer?","Who is your favorite singer?","Who is your favorite singer?", "Who is your favorite actor?", "Who is your favorite actor?", "Who is your favorite actor?", "Who is your favorite athlete?", "Who is your favorite athlete?", "Who is your favorite athlete?"), 
                     answer=c("Michael Jackson","Taylor Swift","Celine Dion", "Brad Pitt", "Julia Roberts", "Hugh Grant", "Michael Jordan", "Dirk Nowitzki", "Mike Tyson"))

我是R语言的初学者。因此,我对启动方法一无所知。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

df$question <- zoo::na.locf(df$question)
df
#    id                      question          answer
# 1   1  Who is your favorite singer?            <NA>
# 2   1  Who is your favorite singer? Michael Jackson
# 3   1  Who is your favorite singer?    Taylor Swift
# 4   1  Who is your favorite singer?     Celine Dion
# 5   2   Who is your favorite actor?            <NA>
# 6   2   Who is your favorite actor?       Brad Pitt
# 7   2   Who is your favorite actor?   Julia Roberts
# 8   2   Who is your favorite actor?      Hugh Grant
# 9   3 Who is your favorite athlete?            <NA>
# 10  3 Who is your favorite athlete?  Michael Jordan
# 11  3 Who is your favorite athlete?   Dirk Nowitzki
# 12  3 Who is your favorite athlete?      Mike Tyson

df <- df[!is.na(df$answer),]
df
#    id                      question          answer
# 2   1  Who is your favorite singer? Michael Jackson
# 3   1  Who is your favorite singer?    Taylor Swift
# 4   1  Who is your favorite singer?     Celine Dion
# 6   2   Who is your favorite actor?       Brad Pitt
# 7   2   Who is your favorite actor?   Julia Roberts
# 8   2   Who is your favorite actor?      Hugh Grant
# 10  3 Who is your favorite athlete?  Michael Jordan
# 11  3 Who is your favorite athlete?   Dirk Nowitzki
# 12  3 Who is your favorite athlete?      Mike Tyson

答案 1 :(得分:1)

使用一点dplyrtidyr,您可以向下填充问题列(.direction参数的默认值),然后过滤非-{{1 }}答案。

NA