将多个字符向量转换为 tibble 上的因子

Convert multiple characters vectors to factors on a tibble

我使用 read_csv() 将文件导入 R。现在我想将各种字符向量转换为因子。我使用了这段代码并且工作正常。

library(readr)
library(tibble)
activos_dic_2017$DESCRI_RIESGO <- parse_factor(activos_dic_2017$DESCRI_RIESGO, 
                                            unique(activos_dic_2017$DESCRI_RIESGO))

基本上是这样的:

tibble_data$column_name <- parse_factor(tibble_data$column_name, 
                                        unique(tibble_data$column_name))

我尝试使用 for 循环实现该代码,其中我已经知道要转换为因子的列号

for(i in c(5, 6, 8) ){

  tibble_data[i] <- parse_factor(tibble_data[i], 
                                  unique(tibble_data[i]))


}

但是我得到了以下错误

Error in parse_vector_(x, collector, na = na, locale_ = locale) : 
Not compatible with STRSXP: [type=list].

如何将多个字符向量转换为因子?

您需要改用双括号。

for(i in c(5, 6, 8) ){

  tibble_data[[i]] <- parse_factor(tibble_data[[i]], 
                                   unique(tibble_data[[i]])
}

使用您的框架:

ref <- c(5, 6, 8)

for(i in 1:length(ref) ){

  tibble_data[, ref[i] ] <- parse_factor(tibble_data[, ref[i] ], 
                                         unique(tibble_data[, ref[i] ]))

}

?parse_factor中可以阅读:

levels
Character vector providing set of allowed levels. if NULL, will generate levels based on the unique values of x, ordered by order of appearance in x.

所以你可以将第二个参数设置为NULL

然后我会使用 purr::modify_at 方便地只修改给定的一组项目:

library(purrr)
iris2 <- modify_at(head(iris),c(2,4),parse_factor,NULL)
str(iris2)
# 'data.frame': 6 obs. of  5 variables:
# $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4
# $ Sepal.Width : Factor w/ 6 levels "3.5","3","3.2",..: 1 2 3 4 5 6
# $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7
# $ Petal.Width : Factor w/ 2 levels "0.2","0.4": 1 1 1 1 1 2
# $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1