简体   繁体   English

循环浏览R中的数据帧列表

[英]Looping through list of data frames in R

I have a series of data frames, df1 df2 , where each data frame follow this structure: 我有一系列数据帧df1 df2 ,其中每个数据帧都遵循以下结构:

x <- c(1:5)
y <- c(1:5)
df1 <- data.frame("Row One"=x, "Row Two"=y)

Sample output for df1: df1的样本输出:

 Row.One    Row.Two
    1           1
    2           2
    3           3
    4           4
    5           5

I put each data frame into a list dfList <- list(df1,df2...) 我将每个数据帧放入列表dfList <- list(df1,df2...)

Now I want to loop through each data frame object in this list to replace the column names using this command: 现在,我想遍历此列表中的每个数据框对象,以使用以下命令替换列名称:

a <- grep("One", colnames(df))
b <- grep("Two", colnames(df))

names(df)[a] <- "R1"
names(df)[b] <- "R2"

How can I structure a loop in R so that I no matter how many data frames are in the list object the column name changing commands above will be applied to each data frame? 如何在R中构造一个循环,以便无论列表对象中有多少个数据帧,上面的列名更改命令都将应用于每个数据帧?

> 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

Just use length(dfList) ? 只是使用length(dfList)

for(i in 1:length(dfList))
{
    a <- grep("One", names(dfList[[i]]))
    ... #etc.
}

Using lapply will be faster. 使用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.

Or use llply (from plyr ) or lapply like so: 或使用llply (来自plyr )或lapply像这样:

library(plyr)
result_list <- llply(list_of_df, function(x) {
                # do the replacing
                return(x)
                })

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM