[英]Assign column names of data.frames in a list of data.frames to other (Spatial) data.frames in a list of data.frames in R
[英]Append all column names in multiple data.frames in a loop
我有多個data.frame,它們都具有不同的名稱,但列名稱相同,例如:
filenames <- c(1:10)
for (i in filenames){
filenames[i] <- paste("df",filenames[i],sep="")
assign((filenames[i]), data.frame(matrix(rnorm(20), nrow=10)))
}
如何將每個df內的列名稱附加到該df的名稱上?
輸出為:
> head(df1)
df1_X1 df1_X2
1 0.2343486 0.2191546
2 0.5042413 2.0720167
3 -0.1082240 0.7376801
4 0.2346395 0.4677974
5 1.1559909 -1.1432890
6 -1.5554426 -0.2309197
> head(df2)
df2_X1 df2_X2
1 -2.79824632 -0.1879618
2 1.93410571 0.3012066
3 0.72948663 0.2139871
4 0.59290004 1.1093813
5 0.04826737 -0.4062374
6 -0.78271090 -1.2870127
等等...
這是我最初的解決方案,它不起作用:
for (i in length(filenames)){
colnames(filenames[i]) <- paste(filenames[i], colnames(filenames[i]), sep = "_")
}
使用列表中的數據框進行此操作更加清晰明了。 這樣就無需笨拙地使用assign
, get
等。
df1 <- data.frame(X1=1:5, X2=6:10)
df2 <- data.frame(X1=16:20, X2=21:25)
dfs <- list(df1 = df1,df2 = df2)
dfs_new <- lapply(names(dfs),
function(x) setNames(dfs[[x]],paste(x,colnames(dfs[[x]]),
sep = "_")))
一種方法是:
df1 <- data.frame(X1=1:5, X2=6:10)
df2 <- data.frame(X1=16:20, X2=21:25)
name1 <- ls(pattern="^df\\d+$")
cNames <- colnames(df1) #assuming that column names are the same for all dataframes
for(i in 1:2){
assign(name1[i], `names<-` (get(name1[i]), paste(name1[i],cNames, sep="_")))
}
df1
# df1_X1 df1_X2
#1 1 6
#2 2 7
#3 3 8
#4 4 9
#5 5 10
df2
# df2_X1 df2_X2
#1 16 21
#2 17 22
#3 18 23
#4 19 24
#5 20 25
要么
cNames1 <- c(t(outer(name1, cNames, FUN=paste, sep="_")))
names2 <- split(cNames1,gsub("_.*", "", cNames1))
list2env(
Map(function(n1, data) {
names(data) <- n1
data
}, names2, mget(name1)),
envir = .GlobalEnv)
df1
# df1_X1 df1_X2
#1 1 6
#2 2 7
#3 3 8
#4 4 9
#5 5 10
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.