首页 文章

更改R中数据框列表中的列名

提问于
浏览
14

目标:从以下列表中更改所有数据框 in the Global Environment 的列名

全球环境中的人名

所以 .

0)列名是:

colnames = c("USAF","WBAN","YR--MODAHRMN")

1)我有以下data.frames:df1,df2 .

2)我把它们放在一个清单中:

dfList <- list(df1,df2)

3)循环列表:

for (df in dfList){
   colnames(df)=colnames
 }

但是这会创建一个带有我需要的列名的新df,它不会更改df1,df2中的原始列名 . 为什么?可以提供解决方案吗?谢谢

可以像:

lapply(dfList, function(x) {colnames(dfList)=colnames})

工作?

3 回答

  • 0

    有了lapply,你可以这样做 .

    创建样本数据:

    df1 <- data.frame(A = 1, B = 2, C = 3)
    df2 <- data.frame(X = 1, Y = 2, Z = 3)
    dfList <- list(df1,df2)
    colnames <- c("USAF","WBAN","YR--MODAHRMN")
    

    然后,使用 setNames 覆盖列表并将新列名称的向量作为第二个参数提供给 setNames

    lapply(dfList, setNames, colnames)
    #[[1]]
    #  USAF WBAN YR--MODAHRMN
    #1    1    2            3
    #
    #[[2]]
    #  USAF WBAN YR--MODAHRMN
    #1    1    2            3
    

    编辑

    如果要将data.frames分配回全局环境,可以像这样修改代码:

    dfList <- list(df1 = df1, df2 = df2)
    list2env(lapply(dfList, setNames, colnames), .GlobalEnv)
    
  • 20

    只需将for循环更改为-循环索引,如下所示:

    数据

    df1 <- data.frame(a=runif(5), b=runif(5), c=runif(5))
    df2 <- data.frame(a=runif(5), b=runif(5), c=runif(5))
    
    dflist <- list(df1,df2)
    
    colnames = c("USAF","WBAN","YR--MODAHRMN")
    

    for (i in seq_along(dflist)){
      colnames(dflist[[i]]) <- colnames
    }
    

    产量

    > dflist
    [[1]]
           USAF      WBAN YR--MODAHRMN
    1 0.8794153 0.7025747    0.2136040
    2 0.8805788 0.8253530    0.5467952
    3 0.1719539 0.5303908    0.5965716
    4 0.9682567 0.5137464    0.4038919
    5 0.3172674 0.1403439    0.1539121
    
    [[2]]
            USAF       WBAN YR--MODAHRMN
    1 0.20558383 0.62651334    0.4365940
    2 0.43330717 0.85807280    0.2509677
    3 0.32614750 0.70782919    0.6319263
    4 0.02957656 0.46523151    0.2087086
    5 0.58757198 0.09633181    0.6941896
    

    通过使用 for (df in dfList) ,您实际上每次都创建一个新的df并将列名更改为保持原始列表( dfList )不变的列名 .

  • 5

    如果希望 for 循环起作用,则不应将整个data.frame作为参数传递 .

    for (df in 1:length(dfList))
      colnames(dfList[[df]]) <- colnames
    

相关问题