用连续值替换R中的空单元格(R,循环)

用连续值替换R中的空单元格(R,循环),r,string,loops,dplyr,R,String,Loops,Dplyr,我有一个数据集,df,其中一列包含空白值,我需要填充这些值。如何填充具有连续值的“空白”字段?(我有一个包含10000多行的数据集) 这是我想要的输出: Subject Folder hi outlookdata hi outlookdata hi outlookdata a

我有一个数据集,df,其中一列包含空白值,我需要填充这些值。如何填充具有连续值的“空白”字段?(我有一个包含10000多行的数据集)

这是我想要的输出:

                   Subject Folder

                   hi      outlookdata
                   hi      outlookdata
                   hi      outlookdata
                   a       outlookdata
                   a       outlookdata
                   hello   outlookdata
                   hello   outlookdata
                   b       outlookdata
                   b       outlookdata 
                   b       outlookdata
                   b       outlookdata
                   goodbye outlookdata 
以下是我的数据的dput:

 structure(list(Subject = structure(c(4L, 4L, 4L, 1L, 1L, 3L, 
 3L, 1L, 1L, 1L, 1L, 2L), .Label = c("", "goodbye", "hello", "hi"
 ), class = "factor"), Folder = structure(c(1L, 1L, 1L, 1L, 1L, 
 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "outlookdata", class = "factor")), class = "data.frame",     row.names = c(NA, 
-12L))
我不确定是否应该使用循环

   for (i in 1:nrow(df)){
          if(df$Subject[i]=="")({ 
          df$Subject[i]=df$Subject[i-1] 
        }
     }
我希望替换“”的值是连续的。
任何建议都是有帮助的。

我们可以使用
rleid
。“主题”列是
因子
,因此它被转换为
字符
,否则分配新值需要通过添加或再次调用
因子来更改
级别
。转换为
data.table
setDT
),创建替换值向量('nm1'),在数据测试中,通过“主题”上的
rleid
创建新列“grp”,然后根据“grp”分组,如果“主题”为空(在
i
上指定),然后分配(
j
)“Subject”作为与
.GRP
提供的数字索引相对应的“nm1”中的值,然后通过分配给
NULL来删除“GRP”

library(data.table)
df1$Subject <- as.character(df1$Subject)
nm1 <- c(letters, do.call(paste0, expand.grid(letters, 1:1000)))
setDT(df1)[, grp := rleid(Subject)][Subject == "", 
      Subject := nm1[.GRP], grp][, grp := NULL][]
#    Subject      Folder
# 1:      hi outlookdata
# 2:      hi outlookdata
# 3:      hi outlookdata
# 4:       a outlookdata
# 5:       a outlookdata
# 6:   hello outlookdata
# 7:   hello outlookdata
# 8:       b outlookdata
# 9:       b outlookdata
#10:       b outlookdata
#11:       b outlookdata
#12: goodbye outlookdata
库(data.table)

df1$Subject有10000行
字母
可能不够,或者我遗漏了什么?@TanishaHudson。我改正了。现在,它将是长度为26026的“nm1”,它将覆盖让我现在试试这个。多谢各位@Akrun值可能是字母数字吗?@TanishaHudson您可以使用
paste
创建任何类型的值,即
nm1谢谢@Akrun!!你们太棒了!!
library(data.table)
df1$Subject <- as.character(df1$Subject)
nm1 <- c(letters, do.call(paste0, expand.grid(letters, 1:1000)))
setDT(df1)[, grp := rleid(Subject)][Subject == "", 
      Subject := nm1[.GRP], grp][, grp := NULL][]
#    Subject      Folder
# 1:      hi outlookdata
# 2:      hi outlookdata
# 3:      hi outlookdata
# 4:       a outlookdata
# 5:       a outlookdata
# 6:   hello outlookdata
# 7:   hello outlookdata
# 8:       b outlookdata
# 9:       b outlookdata
#10:       b outlookdata
#11:       b outlookdata
#12: goodbye outlookdata