按列表名称应用功能

时间:2019-01-18 05:16:10

标签: r lapply

想象一下我有一个清单

l <- list("a" = 1, "b" = 2)

和一个数据框

id   value
 a       3
 b       4

我想将id与列表名称匹配,并使用数据框中的值对该列表应用一个函数。例如,我想要数据框中的值和列表中相应值的总和,我得到

 id   value 
  a    4
  b    6

有人知道吗?

编辑: 一种。 我只是想扩大这个问题。现在,列表的每个元素中都有多个值。

l <- list("a" = c(1, 2), "b" =c(1, 2))

我仍然想要总和

  id   value 
   a     6
   b     7

2 个答案:

答案 0 :(得分:4)

我们可以match的{​​{1}}和names的数据帧list idunlist,然后将其添加到{{ 1}}

list

编辑

如果列表中有多个条目,则匹配后需要value每个列表。我们可以做到

df$value <- unlist(l[match(df$id, names(l))]) + df$value

df
#  id value
#1  a     4
#2  b     6

答案 1 :(得分:1)

您只需要

df$value=df$value+unlist(l)[df$id]# vector have names can just order by names 
df
  id value
1  a     4
2  b     6

尝试用罗纳克语回答

l <- list("b" = 2, "a" = 1)

unlist(l)[as.character(df$id)]# if you id in df is factor 
a b 
1 2 

更新

df$value=df$value+unlist(lapply(l,sum))[df$id]