我认为这是描述我想做的事情的最佳方式:
df$column <- ifelse(is.na(df$column) == TRUE, 0, 1)
但其中的列是动态的。这是因为我有大约 45 列,全部具有相同类型的内容,而我想做的就是检查每个单元格,如果其中有内容,则将其替换为 1,如果没有,则将其替换为 0。我当然尝试过很多不同的事情,但由于 R 中似乎没有 df[index][column],所以我迷路了。我本以为这样的事情会起作用,但是没有:
for (index in df) {
for (column in names(df)) {
df[[index]][[column]] <- ifelse(is.na(df[[index]][[column]]) == TRUE, 0, 1)
}
}
我可以用其他语言(甚至 Excel)快速完成此操作,但我刚刚学习 R,并且想了解为什么如此简单的东西在用于处理数据的语言中似乎如此复杂。谢谢!
这个怎么样:
df.new = as.data.frame(lapply(df, function(x) ifelse(is.na(x), 0, 1)))
lapply
将函数应用于数据框的每一列df
。在这种情况下,该函数执行 0/1 替换。lapply
返回一个列表。将其包裹在as.data.frame
将列表转换为数据框(这是一种特殊类型的列表)。
In R
您通常可以将循环替换为其中之一*apply
函数族。在这种情况下,lapply
“循环”数据框的列。还有,很多R
函数是“向量化”的,这意味着该函数同时对向量中的每个值进行运算。在这种情况下,ifelse
对数据框的整列进行替换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)