R 未使用fill或na.locf为字符变量结转的最后观察值
我有一个由fread生成的R 未使用fill或na.locf为字符变量结转的最后观察值,r,dplyr,data.table,zoo,R,Dplyr,Data.table,Zoo,我有一个由fread生成的data.table,其中一些列包含NAs。 我想用上一行的最后可用数据(“上一次观察结转”机制)填充这些特定列的值 我尝试了zoo的na.locf与dplyr的mutate_at和tidyr的fill函数相结合来填充这些NAs library(dplyr) ## needed for mutate_at library(tidyr) ## needed for fill library(data.table) ## needed for fread library(z
data.table
,其中一些列包含NA
s。
我想用上一行的最后可用数据(“上一次观察结转”机制)填充这些特定列的值
我尝试了zoo
的na.locf
与dplyr
的mutate_at
和tidyr
的fill函数相结合来填充这些NAs
library(dplyr) ## needed for mutate_at
library(tidyr) ## needed for fill
library(data.table) ## needed for fread
library(zoo) ## needed for na.locf
tempImport <- fread(test_filename, header = T, check.names = T, drop = "V198") %>% ## read in csv
mutate_at(vars(VP:frameRate), na.locf)
tempImport <- fread(test_filename, header = T, check.names = T, drop = "V198") %>% ## read in csv
fill(VP:frameRate)
我知道data.table
的nafill
不适用于char
变量。对于na.locf
和fill
也是这样吗?我在文档中找不到任何东西。
如果是:是否有可能用以前的值填写这些
char
变量?另外:这些NA
s通常仅出现在最后一行的这些列中。但是,由于我想将代码用于批处理脚本,我不知道每个fread
输出的最后一行的索引号。我愿意接受变通解决方案,以实现与上述解决方案相当的效果。不确定这是否是您的主要问题,但:
是否有可能用以前的值填充那些char
变量
是的,有一个黑客:
有一个简单的data.table解决方案
dt <- data.table(v = c("A", "A", NA, "B", NA))
dt[, v:=v[1], by=cumsum(!is.na(v))]
dt
dt我试图让你回答你的问题。你需要一个可复制的例子,更清楚你的问题是什么。请阅读标签顶部关于如何提问的说明。
DT <- data.table(x = c("hi", NA, NA, "ho", NA, "bye"))
DT[, x[nafill(replace(.I, is.na(X), NA), "locf")]]
# [1] "hi" "hi" "hi" "ho" "ho" "bye"
DT[.N]
fread("file.csv")[.N]
dt <- data.table(v = c("A", "A", NA, "B", NA))
dt[, v:=v[1], by=cumsum(!is.na(v))]
dt