我有一个包含几个变量的数据集,这些变量是列表(var_1和var_2)。我的目标是将这些变量转换为因子变量。
数据集如下:
var_1 | var_2
Value_1 | Value_A
Value_2 | Value_C
Value_3 | Value_A
Value_43 | Value_Z
Value_3 | Value_A
Value_24 | Value_Y
这是我使用typeof()函数所拥有的:
typeof(mydataset$var_1)
[1] "list"
typeof(mydataset$var_2)
[1] "list"
这是我通过str()函数得到的结果
str(mydataset)
Classes ‘data.table’ and 'data.frame': 83 obs. of 6 variables:
$ var_1 :List of 83
..$ : chr "Value_1"
..$ : chr "Value_2"
..$ : chr "Value_3"
..$ : chr "Value_43"
..$ : chr "Value_3"
..$ : chr "Value_24"
etc...
$ var_2 :List of 83
..$ : chr "Value_A"
..$ : chr "Value_C"
..$ : chr "Value_A"
..$ : chr "Value_Z"
..$ : chr "Value_A"
..$ : chr "Value_Y"
etc...
如何将这些变量转换为因子变量?
答案 0 :(得分:1)
使用unlist
:
DT <- data.table(x = list("a", "b"), y = list("c", "d"))
DT[, names(DT) := lapply(.SD, function(l) factor(unlist(l)))]
str(DT)
#Classes ‘data.table’ and 'data.frame': 2 obs. of 2 variables:
# $ x: Factor w/ 2 levels "a","b": 1 2
# $ y: Factor w/ 2 levels "c","d": 1 2
#- attr(*, ".internal.selfref")=<externalptr>
答案 1 :(得分:0)
我们使用mutate_all
将函数应用于每个列,在其中使用map
作为列本身是list
元素。尚不清楚该结构是否应保持不变。如果是的话,则使用map
和as.factor
library(tidyverse)
mydataset %>%
mutate_all(funs(map(., as.factor)))
如果我们需要将其保留为普通列,请unlist
并转换为factor
mydataset %>%
mutate_all(funs(factor(unlist(.))))
此外,从str
开始,它是data.table
,因此使用data.table
方法
out <- mydataset[, lapply(.SD, function(x) lapply(x, factor))]
str(out)
#Classes ‘data.table’ and 'data.frame': 2 obs. of 2 variables:
# $ var_1:List of 2
# ..$ : Factor w/ 1 level "Value_1": 1
# ..$ : Factor w/ 1 level "Value_2": 1
# $ var_2:List of 2
# ..$ : Factor w/ 1 level "Value_A": 1
# ..$ : Factor w/ 1 level "Value_B": 1
mydataset <- data.table(var_1 = list("Value_1", "Value_2"),
var_2 = list("Value_A", "Value_B"))
答案 2 :(得分:0)
尝试一下:
mydataset[[1]] <- lapply(mydataset[[1]], as.factor)