带 ifelse() 的双循环在 R 中无法正常工作
Double for loop with ifelse() is not working properly in R
我正在尝试 运行 遍历数据框的每一列并将 "unknown" 值转换为 NA。我尝试了以下代码:
for (i in seq(length(df))) {
for (j in seq(nrow(df))) {
ifelse(df[,i][j] == "unknown", NA, df[,i][j])
}
}
但是,它并没有改变任何值。我试图改变的列是因素,所以我也试过:
for (i in seq(length(df))) {
x <- class(df[,i])
as.character(df[,i])
for (j in seq(nrow(df))) {
ifelse(df[,i][j] == "unknown", NA, df[,i][j])
}
class(df[,i]) <- x
}
无济于事。没有得到错误,代码出现运行没有问题;只有值保持为“未知。
我们可以试试:
df[df == "unknown"] = NA
这假设您所有的列都是字符而不是因子。
运行 ifelse 不会更改其任何参数的值。您可能需要将结果分配回 df
的列。按行执行它没有任何意义,因为 ifelse 被设计用于向量,所以它可能是:
for (i in seq(length(df))) {
df[,i] <- ifelse(df[,i] == "unknown", NA, df[,i] )
}
}
鉴于@TimBiegeleisen 说明的更有效的策略,这仍然不是最优的,但至少你可以研究它以了解如何提高你对使用 for
循环和 ifelse
当使用 R.
我正在尝试 运行 遍历数据框的每一列并将 "unknown" 值转换为 NA。我尝试了以下代码:
for (i in seq(length(df))) {
for (j in seq(nrow(df))) {
ifelse(df[,i][j] == "unknown", NA, df[,i][j])
}
}
但是,它并没有改变任何值。我试图改变的列是因素,所以我也试过:
for (i in seq(length(df))) {
x <- class(df[,i])
as.character(df[,i])
for (j in seq(nrow(df))) {
ifelse(df[,i][j] == "unknown", NA, df[,i][j])
}
class(df[,i]) <- x
}
无济于事。没有得到错误,代码出现运行没有问题;只有值保持为“未知。
我们可以试试:
df[df == "unknown"] = NA
这假设您所有的列都是字符而不是因子。
运行 ifelse 不会更改其任何参数的值。您可能需要将结果分配回 df
的列。按行执行它没有任何意义,因为 ifelse 被设计用于向量,所以它可能是:
for (i in seq(length(df))) {
df[,i] <- ifelse(df[,i] == "unknown", NA, df[,i] )
}
}
鉴于@TimBiegeleisen 说明的更有效的策略,这仍然不是最优的,但至少你可以研究它以了解如何提高你对使用 for
循环和 ifelse
当使用 R.