根据之前的外观,在R中填写缺失的值
我有以下数据:根据之前的外观,在R中填写缺失的值,r,dataframe,data.table,R,Dataframe,Data.table,我有以下数据: set.seed(112) round<-rep(1:5,4) player<-rep(1:2, c(10,10)) game<-rep(rep(1:2,c(5,5)),2) age<-rep(NA,20) age[1]<-26 age[11]<-32 gender<-rep(NA,20) gender[1]<-"M" gender[11]<-"F" gamematrix<-cbi
set.seed(112)
round<-rep(1:5,4)
player<-rep(1:2, c(10,10))
game<-rep(rep(1:2,c(5,5)),2)
age<-rep(NA,20)
age[1]<-26
age[11]<-32
gender<-rep(NA,20)
gender[1]<-"M"
gender[11]<-"F"
gamematrix<-cbind(player,game,round,age,gender)
gamematrix<-data.frame(gamematrix)
player game round decs age gender
1 1 1 1 2 26 M
2 1 1 2 3 <NA> <NA>
3 1 1 3 3 <NA> <NA>
4 1 1 4 3 <NA> <NA>
5 1 1 5 1 <NA> <NA>
6 1 2 1 1 <NA> <NA>
7 1 2 2 1 <NA> <NA>
8 1 2 3 3 <NA> <NA>
9 1 2 4 1 <NA> <NA>
10 1 2 5 2 <NA> <NA>
11 2 1 1 1 32 F
12 2 1 2 2 <NA> <NA>
13 2 1 3 3 <NA> <NA>
14 2 1 4 2 <NA> <NA>
15 2 1 5 3 <NA> <NA>
16 2 2 1 3 <NA> <NA>
17 2 2 2 2 <NA> <NA>
18 2 2 3 2 <NA> <NA>
19 2 2 4 3 <NA> <NA>
20 2 2 5 2 <NA> <NA>
我知道如何使用“for”函数,但我正在寻找一个更优雅的解决方案。我认为应该有一种使用“dplyr”的方法,但我无法生成它。有什么想法吗?我建议下一步
tidyverse
方法使用fill()
函数:
library(tidyverse)
set.seed(112)
#Data
round<-rep(1:5,4)
player<-rep(1:2, c(10,10))
game<-rep(rep(1:2,c(5,5)),2)
age<-rep(NA,20)
age[1]<-26
age[11]<-32
gender<-rep(NA,20)
gender[1]<-"M"
gender[11]<-"F"
gamematrix<-cbind(player,game,round,age,gender)
gamematrix<-data.frame(gamematrix)
#Now fill
gamematrix %>% group_by(player) %>% fill(age) %>% fill(gender)
另外,
gamematrix%>%group\U by(玩家)%>%fill(c(年龄、性别))
有助于避免多次使用同一函数产生相同的结果。请参见数据表中的?nafill
。谢谢!!如果每个参与者在最后一行出现“年龄”(即最后一轮(而不是第一轮)时,相同的函数是否有帮助?@YefR在这种情况下,您必须使用fill(年龄,.direction='up')
library(tidyverse)
set.seed(112)
#Data
round<-rep(1:5,4)
player<-rep(1:2, c(10,10))
game<-rep(rep(1:2,c(5,5)),2)
age<-rep(NA,20)
age[1]<-26
age[11]<-32
gender<-rep(NA,20)
gender[1]<-"M"
gender[11]<-"F"
gamematrix<-cbind(player,game,round,age,gender)
gamematrix<-data.frame(gamematrix)
#Now fill
gamematrix %>% group_by(player) %>% fill(age) %>% fill(gender)
player game round age gender
1 1 1 1 26 M
2 1 1 2 26 M
3 1 1 3 26 M
4 1 1 4 26 M
5 1 1 5 26 M
6 1 2 1 26 M
7 1 2 2 26 M
8 1 2 3 26 M
9 1 2 4 26 M
10 1 2 5 26 M
11 2 1 1 32 F
12 2 1 2 32 F
13 2 1 3 32 F
14 2 1 4 32 F
15 2 1 5 32 F
16 2 2 1 32 F
17 2 2 2 32 F
18 2 2 3 32 F
19 2 2 4 32 F
20 2 2 5 32 F