【发布时间】:2020-09-19 13:56:06
【问题描述】:
目标:为一长串数据框添加数据框名称作为某些列的前缀
问题:使用 lapply 或循环似乎 R 没有将数据帧的名称传递给方法。
数据:
A<-data.frame(column_1=c(1,2,3),column_2=c(4,5,6),column_3=c(7,8,9),column_4=c(10,11,12))
B<-data.frame(column_1=c(13,14,15),column_2=c(16,17,18),column_3=c(19,20,21),column_4=c(22,23,24))
C<-data.frame(column_1=c(25,26,27),column_2=c(28,29,30),column_3=c(31,32,33),column_4=c(34,35,36))
list_of_dataframes<-list(A,B,C)
names(list_of_dataframes)<-c("A","B","C")
这只是一个例子。实际上我的数据框列表很长。因此,像 here 那样使用“评论”手动添加名称是不方便的。
所需的解决方案:
$A
A_column_1 A_column_2 A_column_3 column_4
1 1 4 7 10
2 2 5 8 11
3 3 6 9 12
$B
B_column_1 B_column_2 B_column_3 column_4
1 13 16 19 22
2 14 17 20 23
3 15 18 21 24
$C
C_column_1 C_column_2 C_column_3 column_4
1 25 28 31 34
2 26 29 32 35
3 27 30 33 36
如您所见,数据框名称位于列名中,但我想从该操作中排除的第 4 列除外。
我的尝试:
所需的解决方案实际上是由一些代码产生的:
comment(list_of_dataframes$A) <- "A"
comment(list_of_dataframes$B) <- "B"
comment(list_of_dataframes$C) <- "C"
list_of_dataframes<-lapply(list_of_dataframes,function(dataframe){
a<-comment(dataframe)
colnames(dataframe)[c(1,2,3)]<-paste(a, colnames(dataframe)[c(1,2,3)], sep = "_")
return(dataframe)
}
)
list_of_dataframes
这个解决方案的问题是我实际上有一个很长的数据框列表,而且我有很多这样的列表。所以,我需要以自动化的方式完成所有这些工作。 在上面的代码中,我使用“comment”,分别输入每个数据框的名称。我需要自动取每个数据框的名称。我该怎么做?
我尝试在这里使用 deparse(substitute(dataframe)):
list_of_dataframes<-lapply(list_of_dataframes,function(dataframe){
a<-deparse(substitute(dataframe))
colnames(dataframe)<-paste(a, colnames(dataframe), sep = "_")
return(dataframe)
}
)
但是,您可以看到数据框的名称似乎没有传递给 lapply:
$A
X[[i]]_column_1 X[[i]]_column_2 X[[i]]_column_3 X[[i]]_column_4
1 1 4 7 10
2 2 5 8 11
3 3 6 9 12
$B
X[[i]]_column_1 X[[i]]_column_2 X[[i]]_column_3 X[[i]]_column_4
1 13 16 19 22
2 14 17 20 23
3 15 18 21 24
$C
X[[i]]_column_1 X[[i]]_column_2 X[[i]]_column_3 X[[i]]_column_4
1 25 28 31 34
2 26 29 32 35
3 27 30 33 36
您有什么想法可以解决这个问题吗?
【问题讨论】:
标签: r list dataframe rename prefix