我使用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].
如何将多个字符向量转换为因子?
答案 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