我有一系列数据框df1
df2
,其中每个数据框都遵循以下结构:
x <- c(1:5)
y <- c(1:5)
df1 <- data.frame("Row One"=x, "Row Two"=y)
df1的示例输出:
Row.One Row.Two
1 1
2 2
3 3
4 4
5 5
我将每个数据框放入列表dfList <- list(df1,df2...)
现在我想遍历此列表中的每个数据框对象,以使用以下命令替换列名:
a <- grep("One", colnames(df))
b <- grep("Two", colnames(df))
names(df)[a] <- "R1"
names(df)[b] <- "R2"
如何构建R中的循环,以便无论列表对象中有多少数据帧,上面的列名更改命令都将应用于每个数据帧?
答案 0 :(得分:10)
> df1 <- data.frame("Row One"=x, "Row Two"=y)
> df2 <- data.frame("Row Two"=y,"Row One"=x)
> dfList <- list(df1,df2)
> lapply(dfList, function(x) {
names(x)[ grep("One", names(x))] <- "R1"
names(x)[ grep("Two", names(x))] <- "R2"
x} )
[[1]]
R1 R2
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
[[2]]
R2 R1
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
答案 1 :(得分:5)
只需使用length(dfList)
?
for(i in 1:length(dfList))
{
a <- grep("One", names(dfList[[i]]))
... #etc.
}
使用lapply
会更快。
ChangeNames = function(Data)
{
a = grep("One", names(Data))
b = grep("Two", names(Data))
names(Data)[c(a,b)] <- c("R1", "R2")
return(Data)
}
lapply(dfList, ChangeNames) #Returns list of renamed data frames.
答案 2 :(得分:3)
或者使用llply
(来自plyr
)或lapply
,如下所示:
library(plyr)
result_list <- llply(list_of_df, function(x) {
# do the replacing
return(x)
})