在R中使用列表的对象名称创建新变量

时间:2020-04-08 15:12:49

标签: r dataframe lapply

我有一个数据帧的命名列表。我需要使用数据框的名称为每个数据框创建一个新变量,以便最终将它们全部绑定以进行统计和绘图。

我知道lapply不会传递对象的名称,并且有很多类似问题的帖子,但是我只是无法针对我的特定问题采用我所见过的任何解决方案。

这是我第一次尝试过的方法,但是显然不起作用,因为names(x)没有返回对象的名称。

TestList <-list(a = data.frame(Var1 = 1:5,Var2 = 5:1), b = data.frame(Var1 = 6:10,Var2 = 10:6))

lapply(TestList,function(x,y = names(x)){x $ Var3 <-y; return(x)})

我也尝试过使用seq_along,但是后来我迷失了如何为每个数据帧创建新变量。

是否通过索引传递?如果是这样,我可以使用

创建一个新对象

名称(测试列表)

,然后从那里获取名称。我也找不到该怎么做。

最后,这就是我需要获得的:

DesiredTestList <-list(a = data.frame(Var1 = 1:5,Var2 = 5:1,Var3 = rep(“ a”,5)),b = data.frame(Var1 = 6:10, Var2 = 10:6,Var3 = rep(“ b”,5)))

2 个答案:

答案 0 :(得分:0)

我知道了。我只是希望lapply将对象的名称传递给函数。无论如何,这就是我的工作方式:

GotTheTestList <- lapply(seq_along(TestList), function(x){TestList[[x]]$Var3 <- names(TestList)[x]; return(TestList[[x]])})

答案 1 :(得分:0)

对于最终数据框,我需要找到一个更简单的解决方案

bind_rows(TestList, .id = "Var3")