我正在尝试将因素转换为字符,以便我可以重新调整等级。该转换适用于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" ]) ))
答案 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