我正在处理 R 中的data.frame,并希望以特定方式填充空单元格。在下表中,标题是“Dismissal”,第二行和第四行有两个空单元格。由于有超过100,000行,在实际data.frame中,我想一次填充那些空单元格,将第二行填充为NIL,将第四行填充为D.再说一遍,根据以下方式填充空单元格前一个现有细胞的价值。
Dismissal |
--------------------
NIL |
--------------------
(empty) |
--------------------
D |
--------------------
(empty) |
答案 0 :(得分:0)
您可以按如下方式遍历数据框
for (i in 1:nrow(df)){
if (is.na(df$Dismissal[i])){
df$Dismissal[i]=df$Dismissal[i-1]
}
}
如果字段具有NA值,由于csv导入中的空单元格,您需要稍微更改循环:
==, != or >=, <=
NA值无法在is.na()
中生效,因此您需要提问!is.na()
或{{1}}。
答案 1 :(得分:0)
使用dplyr
和zoo
的非循环解决方案:
library(dplyr)
library(zoo)
test.dat <- data.frame('Dismissal' = c('N', NA, 'D', NA, NA, 'C', NA))
test.dat$Dismissal <- as.character(test.dat$Dismissal)
test.dat %>%
mutate(Test = ifelse(is.na(Dismissal),
#use fill forward function from zoo package
zoo::na.locf(lag(Dismissal), na.rm = F),
Dismissal))