[英]how to fill in missing values based on dates in R?
I have a data frame in the following format that represent a large data set that I have 我有以下格式的数据框,它们代表我拥有的大型数据集
F.names<-c('M','M','M','A','A')
L.names<-c('Ab','Ab','Ab','Ac','Ac')
year<-c('August 2015','September 2014','September 2016', 'August 2014','September 2013')
grade<-c(NA,'9th Grade','11th Grade',NA,'11th grade')
df.have<-data.frame(F.names,L.names,year,grade)
F.names L.names year grade
1 M Ab August 2015 <NA>
2 M Ab September 2014 9th Grade
3 M Ab September 2016 11th Grade
4 A Ac August 2014 <NA>
5 A Ac September 2013 11th grade
The year
column is in factor
format in the original data set and there are several missing values for grade
.Basically I want to fill in the missing grade
values based on year
column so that it looks like the following. 该year
列是factor
在原始数据集格式,并有几个遗漏值grade
。基本上我想填充缺失grade
基于价值观year
柱,使它看起来像下面这样。
F.names L.names year grade
1 M Ab August 2015 10th Grade
2 M Ab September 2014 9th Grade
3 M Ab September 2016 11th Grade
4 A Ac August 2014 12th Grade
5 A Ac September 2013 11th grade
I was thinking that my first step would be to covert the year
column which is in factor
format to a date format. 我在想,我的第一个步骤是隐蔽的year
柱是在factor
格式的日期格式。 and then arrange the columns in order and use something like fill
from tidyr
to fill the missing columns. 然后安排列顺序和使用类似fill
从tidyr
,以填补缺失的列。 How should I go about doing this, or is there a better way to approach this? 我应该如何去做,或者有更好的方法来做到这一点?
F.names<-c('M','M','M','A','A')
L.names<-c('Ab','Ab','Ab','Ac','Ac')
year<-c('August 2015','September 2014','September 2016', 'August 2014','September 2013')
grade<-c(NA,'9th Grade','11th Grade',NA,'11th grade')
df.have<-data.frame(F.names,L.names,year,grade)
library(tidyverse)
df.have %>%
separate(year, c("m","y"), convert = T, remove = F) %>%
separate(grade, c("num","type"), sep="th", convert = T) %>%
arrange(F.names, y) %>%
group_by(F.names) %>%
mutate(num = ifelse(is.na(num), lag(num) + 1, num),
type = "grade") %>%
ungroup() %>%
unite(grade, num, type, sep="th ") %>%
select(-m, -y)
# F.names L.names year grade
# 1 A Ac September 2013 11th grade
# 2 A Ac August 2014 12th grade
# 3 M Ab September 2014 9th grade
# 4 M Ab August 2015 10th grade
# 5 M Ab September 2016 11th grade
This solution assumes that you won't have 2 or more consecutive NA
s for a given F.names
value. 此解决方案假定对于给定的F.names
值,您将没有两个或多个连续的NA
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.