R 未使用fill或na.locf为字符变量结转的最后观察值

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

我有一个由fread生成的
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