如何将两列数据帧转换为命名向量?

时间:2016-05-04 05:41:12

标签: r dataframe type-conversion lapply reshape2

我正在尝试将包含两列的数据帧转换为命名向量(嵌套列表)。每行中的信息基本上都是键:值对,因此最终向量中的列表应各自由键命名并包含它们各自的值。

Example input:

Var1   Var2
A      1
A      2
B      1
B      3
C      3
C      4
C      5

Example Output:
namedArray = list(A = c(1,2), B = c(1,3), C = c(3,4,5))

我设法使用reshape2包中的dcast()执行此操作,但这需要额外的后处理来删除行名称和通过强制转换数据框引入的NA。

有没有更有效的方法来实现这一目标?

3 个答案:

答案 0 :(得分:4)

如果您有两列:数据框df1中的X和Y,并且您希望Y的值是具有X值的项目的名称:

myList <- as.list(df1$X)
names(myList) <- df1$Y

对于修改后的问题,答案是已经有一个功能完全正确(并且可能是我给出的更好的答案:

> split(dat$Var2, dat$Var1)
$A
[1] 1 2

$B
[1] 1 3

$C
[1] 3 4 5

答案 1 :(得分:1)

感谢@ 42-和@MMerry让我考虑split()。我找到了一个很好的解决方案,将一个变量分割为另一个变量并将输出包装到列表中。

y <- as.list(split(df$Var2, df$Var1))

答案 2 :(得分:0)

如果您想要数据框列表中的键值对,则技术可能如下所示:

{{1}}