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

时间:2018-02-27 17:44:48

标签: r parsing 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].

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

3 个答案:

答案 0 :(得分:0)

您需要使用双括号。

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

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

答案 1 :(得分:0)

使用您的框架:

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] ]))

}

答案 2 :(得分:0)

?parse_factor中的

可以读取:

  

<强>水平
  提供一套允许的水平的字符向量。如果为NULL,   将根据订单排序的x的唯一值生成级别   外观在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