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