Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将元素名称粘贴到每个列表元素的列上_R_List_Dataframe_Paste - Fatal编程技术网

R 将元素名称粘贴到每个列表元素的列上

R 将元素名称粘贴到每个列表元素的列上,r,list,dataframe,paste,R,List,Dataframe,Paste,我有一个数据帧列表。每个列表元素都有一个唯一的名称,但所有数据帧中的列名都是相同的 我想将每个数据帧的名称粘贴到列中,这样当我cbind将它们合并到一个大数据帧中时,我就可以区分它们了 示例数据 LIST <- list(df1 = data.frame("ColA" = c(1:5), "ColB" = c(10:14)), df2 = data.frame("ColA" = c(21:25), "ColB" = c(30:34))) str(LIST)

我有一个数据帧列表。每个列表元素都有一个唯一的名称,但所有数据帧中的列名都是相同的

我想
将每个数据帧的名称粘贴到列中,这样当我
cbind
将它们合并到一个大数据帧中时,我就可以区分它们了

示例数据

LIST <- list(df1 = data.frame("ColA" = c(1:5), "ColB" = c(10:14)), 
             df2 = data.frame("ColA" = c(21:25), "ColB" = c(30:34)))

str(LIST)

List of 2
 $ df1:'data.frame':    5 obs. of  2 variables:
  ..$ ColA: int [1:5] 1 2 3 4 5
  ..$ ColB: int [1:5] 10 11 12 13 14
 $ df2:'data.frame':    5 obs. of  2 variables:
  ..$ ColA: int [1:5] 21 22 23 24 25
  ..$ ColB: int [1:5] 30 31 32 33 34

您可以在带有全局分配的
lappy
中执行此操作。您好,您可以使用
map2
执行此操作:

library(tidyverse)
map2(mylist, names(mylist), ~rename_all(.x, function(z) paste(.y, z, sep = ".")))
编辑: 或者按照最常用的imap中的建议

imap(mylist, ~rename_all(.x, function(z) paste(.y, z, sep = ".")))

由于您提到以后要使用
cbind
,因此可以立即使用
as.data.frame

as.data.frame(LIST)
#  df1.ColA df1.ColB df2.ColA df2.ColB
#1        1       10       21       30
#2        2       11       22       31
#3        3       12       23       32
#4        4       13       24       33
#5        5       14       25       34

感谢@RonakShah,您可以使用以下几行返回列表,以备需要

df1 <- as.data.frame(LIST)
split.default(df1, sub("\\..*", "", names(df1)))

df1另一个(更易读的IMO)变体是
Map(函数(x,y){names(x)@Sotos Nice,因此我们可以在没有
Perfect的情况下完成它!我不知道
as.data.frame
的行为。比我尝试的事情简单得多!
library(tidyverse)
map2(mylist, names(mylist), ~rename_all(.x, function(z) paste(.y, z, sep = ".")))
imap(mylist, ~rename_all(.x, function(z) paste(.y, z, sep = ".")))
as.data.frame(LIST)
#  df1.ColA df1.ColB df2.ColA df2.ColB
#1        1       10       21       30
#2        2       11       22       31
#3        3       12       23       32
#4        4       13       24       33
#5        5       14       25       34
df1 <- as.data.frame(LIST)
split.default(df1, sub("\\..*", "", names(df1)))