10

一連のデータ フレーム が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でループを構成するにはどうすればよいですか?

4

3 に答える 3

20
> 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
于 2013-10-18T23:00:19.720 に答える
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.
于 2013-10-18T22:49:01.197 に答える