Есть ли способ присвоить значения фрейму данных в цикле for? - PullRequest
0 голосов
/ 03 апреля 2019

Я хочу присвоить значения фрейму данных, используя цикл 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 столбцов вместо генерации одного кадра данных для каждой итерации.

1 Ответ

1 голос
/ 03 апреля 2019

Может быть, это то, что вы ищете.Вы можете переименовать столбцы, используя функцию 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, чтобы получить правильное количество строк перед началом цикла.

...