【发布时间】:2020-08-14 18:34:51
【问题描述】:
假设我有这样的数据集:
Object date date_data
1: N <NA>
2: A <NA>
3: A <NA>
4: A 2020-01-01 something
5: B <NA>
6: B <NA>
7: B 2020-01-01 something
8: C <NA>
9: C <NA>
10: C 2020-01-01 something
生成者
example <- data.table(Object = rep(LETTERS[1:3], each=3), date = as.Date(rep(c(NA,NA,"2020-01-01"),3)), date_data = rep(c("","","something")))
example <- rbind(list(Object="N", date=as.Date(NA), date_data = ""), example)
我知道我可以使用 nafill 为每个组填写缺失的日期:
example[, date:= nafill(date,"nocb"), by=Object]
Object date date_data
1: N <NA>
2: A 2020-01-01
3: A 2020-01-01
4: A 2020-01-01 something
5: B 2020-01-01
6: B 2020-01-01
7: B 2020-01-01 something
8: C 2020-01-01
9: C 2020-01-01
10: C 2020-01-01 something
我想做的是用与日期列相同的方式填写date_data列。我不能使用数据表的 nafill 选项来做到这一点,因为它不适用于字符值。
什么是简单的解决方法?我看过类似的问题,但没有找到任何涉及相同问题的问题
编辑
@Ronak Shah 的 data.table 适用于原始示例。但是如果我把它改成
example <- data.table(Object = c(rep("A",6), rep("B",3)), date = as.Date(rep(c(NA,NA,"2020-01-01"),3)), date_data = rep(c("","","something")))
example <- rbind(list(Object="N", date=as.Date(NA), date_data = ""), example)
Object date date_data
1: N <NA>
2: A <NA>
3: A <NA>
4: A 2020-01-01 something
5: A <NA>
6: A <NA>
7: A 2020-01-01 something
8: B <NA>
9: B <NA>
10: B 2020-01-01 something
na.fill 不再起作用,我收到错误消息:提供了 4 个项目以分配给“date_data”列中大小为 6 的组 2。 RHS 长度必须为 1(单个值即可)或与 LHS 长度完全匹配。如果您希望“回收”RHS,请明确使用 rep() 向您的代码读者明确说明这一意图。
【问题讨论】:
-
你可以看看
tidyr::fill(),zoo::na.locf() -
你可以尝试转换为因子然后使用data.table
nafill函数
标签: r string data.table grouping na