如何将两列数据帧转换为命名向量?
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))
我正在尝试将由两列组成的数据框转换为命名向量(嵌套列表)。每行中的信息本质上是 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))