【问题标题】:Loop through list of data frames循环遍历数据框列表
【发布时间】:2015-08-14 09:44:34
【问题描述】:

我有几个数据框。在每个数据框中都有一个名为 Current.Net.Price 的列。我想将列名更改为不同的名称。 因此我有两个列表:

Names <- c("name1","name2","name3","name4","name5")
dfList <- list(df1,df2,df3,df4,df5)

我尝试过这样的事情:

i=1
for (df in dfList) {
  names(df)[names(df) == "Current.Net.Price"] <- Names[i]
  i<-i+1
}

但是当我打电话时

View(dfList$df2)

该列仍命名为 Current.Net.Price

有人可以帮帮我吗? :)

【问题讨论】:

  • 澄清一下:dfList 中的每个 data.frame 都有一个名为“Current.Net.Price”的列,并且每个列名都将替换为 不同 名称从Names获得的,对吧?
  • 是我,还是这听起来像XY problem?你最终想要解决/实现什么?
  • 但如果这真的是你想要的:df[,Names(i)] &lt;- df$Current.Net.Price。更容易检查您是否创建了新列并且没有覆盖原始数据。
  • 嗯,这是关于不同月份的一些价目表。每个都是一个价格,我想重命名它们,因为最后我想合并所有数据框。但是您的解决方案也有效:)

标签: r loops dataframe


【解决方案1】:

检查这个简单但类似的例子。 这完全取决于您如何访问 dfList 以提取有关 data.frames 名称的信息。

 # data frames
dt1 = data.frame(x = 1:3,
                     y = 5:7)

dt2 = data.frame(x = 1:4,
                     z = 5:8)

dt3 = data.frame(y = 1:10,
                 x = 21:30)


Names = c("A","B","C")
dfList <- list(dt1,dt2,dt3)


for (i in 1:length(dfList)) {

  names(dfList[[i]])[names(dfList[[i]])=="x"] = Names[i]

}

【讨论】:

    【解决方案2】:

    我相信当你这样循环时(循环列表/向量中的项目),原始对象不会得到更新。例如,

    l <- 1:5
    for (i in l) {
      i <- 3
    }
    l
    # [1] 1 2 3 4 5
    

    以下对我有用。

    df1 <- data.frame("x" = rnorm(5),"Current.Net.Price"=1:5)
    df2 <- data.frame("x" = rnorm(5),"Current.Net.Price"=1:5)
    df3 <- data.frame("x" = rnorm(5),"Current.Net.Price"=1:5)
    df4 <- data.frame("x" = rnorm(5),"Current.Net.Price"=1:5)
    df5 <- data.frame("x" = rnorm(5),"Current.Net.Price"=1:5)
    
    Names <- c("name1","name2","name3","name4","name5")
    dfList <- list(df1=df1,df2=df2,df3=df3,df4=df4,df5=df5)
    
    
    for (i in 1:5) {
      names(dfList[[i]])[names(dfList[[i]]) == "Current.Net.Price"] <- Names[i]
    }
    
    sapply(dfList, colnames)
    
    #      df1     df2     df3     df4     df5
    # [1,] "x"     "x"     "x"     "x"     "x"
    # [2,] "name1" "name2" "name3" "name4" "name5"
    

    【讨论】:

      猜你喜欢
      • 2017-06-08
      • 1970-01-01
      • 2021-08-31
      • 2021-02-08
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多