我想把我的因子變數中的NAs轉換成一個字串 "None",這將是我的資料集中的一個水平。
我已經嘗試了
for ( col in 1: ncol(data)){
class(data$col) == "factor"/span>
data$col = addNA(data$col)
levels(data$col) < - c(levels(data$col)。 "None")
print(summary(data))
}。
然后我得到了這個錯誤
未知或未初始化的列: `col`. 未知或未初始化的列: `col`.Error:分配的資料`addNA(cdata$col)`必須與現有資料兼容。
x 現有資料有1000行。
x 分配的資料有0行。
i 只有大小為1的向量被回收。
這種方式的問題是什么?
uj5u.com熱心網友回復: 我們可以回圈 在 uj5u.com熱心網友回復: 這里有一個替代方法: 下面是一個模擬資料集的例子: 輸出: 資料:
標籤:穿過那些因子的列,使用forcats中的fct_explicit_na將NA轉換為 "無"。
library(dplyr)
library(forcats)
資料 <- 資料 %>%
mutate(across(where(is. factor), ~ fct_explicit_na(. , na_level = "None"))
for回圈中,有多個問題
class(data)
class(data$col) == "factor"被檢查,但是它應該在一個if(...)運算式中data$col - 是錯誤的,因為沒有以col為名稱的列名,相反,它應該是data[[col]]summary(data)可以在for回圈之外檢查for (col in seq_along(data)){
if(class(data[col]]) == " factor") {
data[[col]]/span> = addNA(data[[col])
levels(data[[col]) < - c(levels(data[[col]])。 "None")
}
}
print(summary(data))
# identify which is factor column。
x <- sapply(df, is. factor)
df[, x] < - lapply(df[, x], function(. ){。
級別(. ) <- c(levels(. ), "None")
replace(., is.na(. ), "None")。
})
a b c
<fct> < fct> <dbl>/span>
1 1 None 2
2 None 3 NA
3 4 無 NA
df < -結構(list(a =結構(c(1L。 NA, 2L), 。 標簽 = c("1"/span>, "4"/span>.
)。 class = "factor")。 b =結構(c(NA。 1L, NA), 。 標簽 = "3"。 class = "factor"),
c = c(2。 NA。 NA)),行。 names = c(NA。 -3L)。 class = c("tbl_df"。
"tbl", "data.frame"))
