我有以下 Dataframe df和列表l(dput
如下):
> df
group value
1 A 1
2 B 2
3 C 3
> l
$A
[1] 999
$B
[1] 55
我想根据列表中的名称,使用 Dataframe 的组变量将列表中的值连接到 Dataframe ,并将其命名为“value_l”。预期输出应如下所示:
group value value_l
1 A 1 999
2 B 2 55
3 C 3 NA
所以我想知道是否有人知道如何根据名字将列表加入数据框?dput
方向角和长度:
df <- structure(list(group = c("A", "B", "C"), value = c(1, 2, 3)), class = "data.frame", row.names = c(NA,
-3L))
l <- list(A = 999, B = 55)
5条答案
按热度按时间lb3vh1jj1#
你可以使用
match
。如果df$group
是一个 * 字符 *(这里就是这种情况),它可以直接用于列表的子集。如果需要使用
NA
而不是NULL
,则另外使用:或者一步到位:
这里,我们 * 将
list
连接到data.frame
*。如果列表可以转换成向量,你可以使用
unlist
(感谢@G. Grothendieck的评论),但在这里我们将vector
加入到data.frame
中。另一个选项,也加入了
vector
到data.frame
将使用merge
。注:对于给定的
list
,结果看起来相似,但如果list
看起来如下,则情况并非如此:一种可能的解决办法是:
获取第一个匹配项:
进行 * 左连接 *
其他选择。
有关其他选项,请查看How to join (merge) data frames (inner, outer, left, right)。
ldxq2e6h2#
使用
base R
中的merge
或使用
dplyr
或者使用
enframe/unnest
或者它是否可以是列表列
u91tlkcl3#
您可以:
其给出:
pkwftd7m4#
也许这个:
x一个一个一个一个x一个一个二个x
b1uwtaje5#
这是GKi建议的
unlist()
的一个简单版本,如果你的列表总是有一个名称和一个数值,你可以把它转换成一个命名向量,然后把它用作一个查找向量,这比合并或匹配简单:对于单线解决方案,如果没有中间变量:
根据您需要列表的其他用途,甚至可以在第一个位置使用命名向量而不是列表。