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

How to convert two columns of dataframe into named vector?

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

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() 做到了这一点,但这需要额外的 post 处理来删除行名称和通过转换数据框引入的 NA。

有没有更有效的方法来完成这个?

如果您有 2 列:数据框 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

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

x = data.frame(x=letters[1:5],y=1:5)
y = split(x,seq(1:nrow(x)))
names(y) = x$x
y$a

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

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