r - 如何根据R中的日期填写缺失值?
问题描述
我有一个以下格式的数据框,代表我拥有的大型数据集
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
该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
我在想我的第一步是将格式的year
列factor
转换为日期格式。然后按顺序排列列,并使用fill
from之类的东西tidyr
来填充缺失的列。我应该怎么做呢,还是有更好的方法来解决这个问题?
解决方案
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
此解决方案假定NA
给定F.names
值不会有 2 个或更多连续 s。
推荐阅读
- python - 如何自动化我的 if 语句以在 openpyxl 中编写两个 excel 文档?
- r - 如何下标/上标和斜体 x 轴标签?
- python - 为什么当我尝试使用默认构造函数实例化对象时,由于调用了参数化构造函数而出现错误?
- amazon-web-services - AWS S3 最终一致性:为什么存储桶列表返回一个键,但一个头请求无
- node.js - 如何使用 koa 框架托管 mp3 文件
- haskell - Haskell中作为类型变量的高级类型
- php - 删除附件页面上的页面标题
- matlab - 用于连接字符串的版本兼容方法
- python-3.x - 我想我在 jupyter notebook/python3 中进行故障排除时搞砸了我的文件目录
- python - 使用python对图像中的像素进行基于密度的异常值检测