问题描述
我正在寻找一种在以下格式的列表之间来回的快速方式:
I'm looking for a quick way to get back and forth between a list of the following format:
$`a`
[1] 1 2 3
$`b`
[1] 4 5 6
以下格式的数据框架:
name x
1 a 1
2 a 2
3 a 3
4 b 4
5 b 5
6 b 6
(在这种情况下,不太在乎这些列的名称)。
(Don't really care what the names of the columns are, in this case.)
以上是R格式使用的数据框:
Here's the data frame used above in R-format:
df <- data.frame(name=c(rep("a",3),rep("b",3)), x=c(1:3,4:6))
再次,我正在寻找两个单独的操作:一个将上述数据框架转换为列表,另一个将其转换回数据框架。
Again, I'm looking for two separate operations: one to convert the above data.frame to a list, and another to convert it back to a data.frame.
推荐答案
使用 stack
和 unpack
在基地R:
x <- data.frame(a=1:3, b=4:6)
x
a b
1 1 4
2 2 5
3 3 6
使用 stack
从宽到高,即将向量叠加在一起。
Use stack
to from wide to tall, i.e. stack the vectors on top of one another.
y <- stack(x)
y
values ind
1 1 a
2 2 a
3 3 a
4 4 b
5 5 b
6 6 b
使用 unpack
做相反的。
unstack(y)
a b
1 1 4
2 2 5
3 3 6
如果您的数据结构比您描述的更复杂, stack
和 unpack
可能不再适合。在这种情况下,您必须在基础R中使用 reshape
,或 fusion
和 dcast
包 reshape2
。
If your data structure is more complicated than you described, stack
and unstack
may no longer be suitable. In that case you'll have to use reshape
in base R, or melt
and dcast
in package reshape2
.
这篇关于命名列表到/来自Data.Frame的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!