R data.table到行列表;更好的方法?

时间:2015-01-05 16:48:25

标签: r list data.table

我想将R data.table转换为行列表(每行由列表表示)。到目前为止,我已经找到了两种方法:

library(data.table)

x.dt = data.table(x = seq(1, 10), y = c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j"), key="x")

# Using lapply & split
x.list.1 = lapply(split(x.dt, rownames(x.dt)), as.list)

# Using Lapply
x.list.2 = lapply(as.list(1:nrow(x.dt)), function(row) as.list(x.dt[row[1],]))

他们对我来说都显得有点笨拙。是否有更好(更简洁)的方法呢?

亲切的问候, 赫尔曼

2 个答案:

答案 0 :(得分:4)

按行应用:

x.list.3 <- apply(x.dt,1,as.list)

答案 1 :(得分:2)

我不知道这是不那么笨重,但这有效:

as.list(as.data.table(t(x.dt)))

您使用data.table转置t(),然后再将其声明为data.table,将其设为list

输出:

$V1
[1] " 1" "a" 

$V2
[1] " 2" "b" 

$V3
[1] " 3" "c" 

$V4
[1] " 4" "d" 

$V5
[1] " 5" "e" 

$V6
[1] " 6" "f" 

$V7
[1] " 7" "g" 

$V8
[1] " 8" "h" 

$V9
[1] " 9" "i" 

$V10
[1] "10" "j"

正如@akrun在评论中指出的那样,此处的输出与您的示例不同,但它仍然是列表中的每一行,因此您可能会发现更好或更差。

修改 正如@David Arenburg在评论中指出的那样,

as.list(unlist(t(x.dt)))

提供与问题中两个示例相同的输出。