我正在处理一个 df 列表,我想为列表中每个 df 的每个 df 行的每个 df 列更改此错字“-”。
然而,当我运行下一个代码然后 unlist 以验证它是否有效时,输出仍然是相同的“-”而不是 NA:
for(i in 1:length(df_list)){
for(j in i){
for(z in j){
if(df_list[[i]][[j]][[z]] == "-"){
return(NA)
} else {
df_list[[i]][[j]][[z]]
}
}
}
}
## unlist to verify ##
for(i in names(df_list)){
assign(i, df_list[[i]], .GlobalEnv)
}
##verifying ##
df1[1, "col"]
// output //
"-"
无论如何,在 R 中是否可以使用其他对象执行此操作?
最佳答案
不需要那么多嵌套的for
循环,一个简单的lapply
循环就会把所有数据帧中的"-"
都改成不适用
。
df_list <- lapply(df_list, function(x){
is.na(x) <- x == "-"
x
})
测试数据创建代码
f <- function(i){
d <- data.frame(x = letters[1:5], y = 6:10, a = letters[1:5])
d$x[sample(5, 1)] <- "-"
d$a[sample(5, 2)] <- "-"
d
}
df_list <- lapply(1:3, f)
rm(f)
关于r - 循环不起作用并且不会在 R 中引发任何错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64054714/