【问题标题】:Error in sort.list(y), while converting all columns to a factor in data.table [duplicate]sort.list(y)中的错误,同时将所有列转换为data.table中的一个因子[重复]
【发布时间】:2020-04-22 16:00:05
【问题描述】:

我正在尝试将 data.table 的所有列转换为 factor 类。但是,我收到以下错误消息:

sort.list(y) 中的错误:对于“sort.list”,“x”必须是原子的。您是否在列表中调用了“排序”?

我使用的代码如下:

colnms = colnames(dt)
dt[,colnms:=lapply(.SD,as.factor),.SDcols=colnms]

【问题讨论】:

  • 我认为错误信息在这里很有帮助——请务必仔细阅读!至于让它可操作,如果我看到这个,我的第一个想法是检查dt的列类型:print(dt, class=TRUE),或者sapply(dt, class)

标签: r type-conversion data.table


【解决方案1】:

当您有多个要分配的列时,请在列名周围使用圆括号。试试看:

library(data.table)
dt[,(colnms) := lapply(.SD,as.factor), .SDcols=colnms]

由于您要转换所有列,因此无需指定 .SDcols 也可以使用此方法

dt[,(colnms) := lapply(.SD,as.factor)]

使用可重现的示例:

dt <- mtcars
setDT(dt)
colnms = colnames(dt)
dt[,(colnms) := lapply(.SD,as.factor), .SDcols=colnms]
str(dt)

#Classes ‘data.table’ and 'data.frame': 32 obs. of  11 variables:
# $ mpg : Factor w/ 25 levels "10.4","13.3",..: 16 16 19 17 13 12 3 20 19 14 ...
# $ cyl : Factor w/ 3 levels "4","6","8": 2 2 1 2 3 2 3 1 1 2 ...
# $ disp: Factor w/ 27 levels "71.1","75.7",..: 13 13 6 16 23 15 23 12 10 14 ...
# $ hp  : Factor w/ 22 levels "52","62","65",..: 11 11 6 11 15 9 20 2 7 13 ...
# $ drat: Factor w/ 22 levels "2.76","2.93",..: 16 16 15 5 6 1 7 11 17 17 ...
# $ wt  : Factor w/ 29 levels "1.513","1.615",..: 9 12 7 16 18 19 21 15 13 18 ...
# $ qsec: Factor w/ 30 levels "14.5","14.6",..: 6 10 22 24 10 29 5 27 30 19 ...
# $ vs  : Factor w/ 2 levels "0","1": 1 1 2 2 1 2 1 2 2 2 ...
# $ am  : Factor w/ 2 levels "0","1": 2 2 2 1 1 1 1 1 1 1 ...
# $ gear: Factor w/ 3 levels "3","4","5": 2 2 2 1 1 1 1 2 2 2 ...
# $ carb: Factor w/ 6 levels "1","2","3","4",..: 4 4 1 1 2 1 4 2 2 4 ...
# - attr(*, ".internal.selfref")=<externalptr> 

【讨论】:

  • 奇怪。即使使用圆括号,我也会遇到同样的错误。如果有任何列有不想要的值,让我检查数据。
  • @tushaR 在这种情况下,有一个可重现的示例会很有帮助,因为如图所示,它对于示例 mtcars 数据集可以正常工作。
  • 感谢您的帮助。我通过执行这行代码 dt[,colnms:=lapply(.SD,as.factor),.SDcols=colnms] 创建了一个错误的列。
猜你喜欢
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 2018-03-21
  • 2023-03-14
相关资源
最近更新 更多