转换为data.table中的字符时的因素处理

时间:2019-05-10 07:19:54

标签: r data.table

我正在尝试将因素转换为字符,以便我可以重新调整等级。该转换适用于data.frames,但不适用于data.table。我知道我可以使用as.character()来转换data.frames中的因子,但无法在data.table(Convert data.frame columns from factors to characters)中找出原因

这是一个例子

library( data.table )
mtcars$name <- as.factor( rownames( mtcars ) ) 
m <- data.table( mtcars )

这是因子的第四行

m[ 4 , "name" ]

data.table将其转换为字符时会使其成为数字

as.character( m[ 4 , "name" ] )

它可以在data.frame中工作-这就是我想要的

as.character( mtcars[ 4 , "name" ] )

我需要使它起作用,以便我可以重新调整因子。我想按名称指定参考类别

m <- within(m, name <- relevel(name, ref = as.character( m[ 4 , "name" ]) ))

它与data.frame一起使用

mtcars <- within(mtcars, name <- relevel(name, ref = as.character( mtcars[ 4 , "name" ]) ))

1 个答案:

答案 0 :(得分:1)

提取列,它仍然是data.table,只有一列

as.character(m[4, "name"]$name)
#[1] "Hornet 4 Drive"

问题在于该列是1)factor,2),它仍然是data.table(data.frame行为的子集是不同的,因为它的默认行为是drop = TRUE ,情况并非如此)

我们也可以使用data.frame复制同一问题

as.character(mtcars[4, "name", drop = FALSE])
#[1] "13"

factor被强制转换为integer的存储模式值,然后仅将其转换为character