2015-01-05 16 views
0

我想将一个R 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],])) 

他们对我来说都显得有些笨拙。有没有更好的(更简洁)的方式来做到这一点?

亲切的问候, 赫尔曼

+6

出于好奇:为什么呢?这似乎不太有用,通常也是一个坏主意。 – Roland

+1

@Roland我需要将表的摘要导出为嵌套树结构(JSON)。 – Herman

回答

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在评论中指出的,这里的输出是从你的例子不同,但是它仍然是在列表中的每一行,所以你可能会发现更好或更坏。

编辑 作为@大卫Arenburg在评论中指出,

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

提供输出作为问题的两个例子相同。

+1

您可以通过稍微更改'as.list(unlist(t(x.dt)))' –

+0

这个工作,但我不保留类型。在我的例子中,所有东西都被强制为字符串。 @Marat Talipov的解决方案也是如此。 – Herman

2

使用应用由行:

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