将多个字符向量转换为 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
我使用 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