每个人 -
我想先说我已经查看了此链接以尝试解决我的问题:
不同之处在于,在那个问题中,OP 想要改变所有具有相同水平的因素的水平。在我的例子中,我希望仅将设置为“”的第一级更改为“未知”之类的内容,而将其余级别单独保留。我知道我可以用这样的“非 R”方式做到这一点:
for (i in 64:88) {
var.name <- colnames(df[i])
levels(eval(parse(text=paste('df$', var.name, sep=''))))[levels(eval(parse(text=paste('df$', var.name, sep='')))) == ' '] <- 'Unknown'
}
但这是一种低效的方法。尝试使用上面链接的问题中提出的方法给了我这个代码:
df[64:88] <- lapply(df[64:88], factor, levels=c('Unknown', ??))
我不知道用什么代替问号。我尝试只使用“levels [-1]”,但很明显为什么这不起作用。我也尝试过“levels(df[64:88])[-1]”,但还是不行。因此,我尝试使用以下代码修改代码:
df[64:88] <- lapply(df[64:88], function(x) levels(x)[levels(x) == ' '] <- 'Unknown')
但是每当我调用levels$transaction_type1(其中transaction_type1 是df[64] 的列名)时,我都会得到NULL。
我在这里想念什么?
在此先感谢您的帮助!
根据几个请求,这是我的数据示例:
df$transaction_type1[1:100]
[1]
[13] HOME RENEW
[25]
[37]
[49]
[61] AUTO MANAGE AUTO RENEW
[73] AUTO MANAGE AUTO RENEW
[85]
[97]
Levels: AUTO CLAIM AUTO MANAGE AUTO PURCHASE AUTO RENEW HOME CLAIM HOME RENEW
如您所见,有很多值等于 ' ',所有 25 个变量看起来都像这样,但级别不同。我的数据由 222 个变量和 24,850 行组成,所以我不知道 SO 给出示例数据的标准是什么。此外,这段代码也可能有所帮助:
> levels(df$transaction_type1)
#[1] " " "AUTO CLAIM" "AUTO MANAGE" "AUTO PURCHASE" "AUTO RENEW" "HOME CLAIM" "HOME RENEW"
> levels(df$transaction_type1)[levels(df$transaction_type1) == ' '] <- 'Unknown'
> levels(df$transaction_type1)
#[1] "Unknown" "AUTO CLAIM" "AUTO MANAGE" "AUTO PURCHASE" "AUTO RENEW" "HOME CLAIM" "HOME RENEW"
如果需要更多信息,请告诉我,以便我提供并了解寻求帮助的 SO 标准。谢谢!