【问题标题】:Is there a way to assign values to a data frame in a for-loop?有没有办法在 for 循环中为数据框赋值?
【发布时间】:2019-08-24 16:18:30
【问题描述】:

我想使用 for 循环将值分配给数据帧,该循环遍历数据帧中的不同行。

我试图将我需要的变量名分配给一些值,这些变量名在每次迭代中都会发生变化,然后将这些值放在一个数据框中,但没有成功

banks <- read.csv("banks_csv.csv", sep = ";", stringsAsFactors = FALSE)
banks<-data.frame(banks)

for (row in 1:nrow(banks)){
bank = banks[row, "Company"]

reviews <- read.csv(paste(bank, "_cleaned.csv", sep = ""))
reviews$X = NULL
reviews_summary <- reviews %>% 
group_by(Year_Quarter) %>%     
    summarise(rat_gen = mean(rat_general, na.rm = TRUE), 
              CV = mean(rat_CV, na.rm = TRUE), 
              WL = mean(rat_WL, na.rm = TRUE), 
              CO = mean(rat_CO, na.rm = TRUE), 
              CB = mean(rat_CB, na.rm = TRUE), 
              SM = mean(rat_SM, na.rm = TRUE)) 

nam <- paste("general_", bank, sep = "")
assign(nam, reviews_summary$rat_gen)

nam <- paste("CV_", bank, sep = "")
assign(nam, reviews_summary$CV)

nam <- paste("WL_", bank, sep = "")
assign(nam, reviews_summary$WL)

nam <- paste("CO_", bank, sep = "")
as.list(nam, reviews_summary$CO)

nam <- paste("CB_", bank, sep = "")
as.list(nam, reviews_summary$CB)

nam <- paste("SM_", bank, sep = "")
as.list(nam, reviews_summary$SM)

df <- data.frame(paste("general_", bank, sep = ""), paste("CV_", bank, sep = ""), paste("WL_", bank, sep = ""), paste("CO_", bank, sep = ""), paste("CB_", bank, sep = ""), paste("SM_", bank, sep = ""))
}

编辑:我希望只有一个 data.frame,每次迭代添加 6 列,而不是为每次迭代生成一个数据框。

【问题讨论】:

  • 嗨,我不太明白你想要的输出应该是什么样子。您是否想要与 reviews_summary 相同的值但具有不同的列名?
  • 您好,感谢您的回答!我正在寻找的是类似的东西,但是我不想为每次迭代生成一个新的数据框,我希望只有一个 data.frame,每次迭代添加 6 列,抱歉描述不好

标签: r dataframe for-loop assign


【解决方案1】:

也许这就是你要找的。您可以使用rename 函数重命名列:

for (row in 1:nrow(banks)){
  bank = banks[row, "Company"]
  reviews <- read.csv(paste(bank, "_cleaned.csv", sep = ""))

  df_bank <- reviews %>% 
    group_by(Year_Quarter) %>%     
    summarise(general = mean(rat_general, na.rm = TRUE), 
              CV = mean(rat_CV, na.rm = TRUE), 
              WL = mean(rat_WL, na.rm = TRUE), 
              CO = mean(rat_CO, na.rm = TRUE), 
              CB = mean(rat_CB, na.rm = TRUE), 
              SM = mean(rat_SM, na.rm = TRUE)) %>% 
    rename_at(-1, ~paste0(.x, "_", bank)) %>% 
    as.data.frame()

  df <- cbind(df, df_bank)
 }

请注意,在开始循环之前,您必须初始化 df 以获得正确的行数。

【讨论】:

  • 您好,感谢您的回答!我正在寻找的是类似的东西,但是我不想为每次迭代生成一个新的数据框,我希望只有一个 data.frame,每次迭代添加 6 列,抱歉描述不好
  • 完美,正是我想要的,非常感谢
猜你喜欢
  • 1970-01-01
  • 2018-02-14
  • 2021-03-15
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多