проблема с именованием фрейма данных с использованием loop, rbind и списка имен фреймов данных - PullRequest
0 голосов
/ 01 января 2019

Я новый программист RЯ пытаюсь использовать rbind для объединения временных кадров данных.Мне нужно, чтобы имена каждого набора объединенных наборов данных были взяты из списка фреймов данных, через которые проходит цикл.

Я могу получить временные файлы для правильного объединения, но это не сработает, если я используюимя фрейма данных от итерации по списку имен.Я искал и искал, а также позвонил другу-программисту, но безрезультатно.Спасибо !!

#initialize empty data frames
sheet1 <- data.frame(County = character(), Winner = character())
sheet2 <- data.frame(County = character(), Winner = character())
sheet3 <- data.frame(County = character(), Winner = character())
sheet4 <- data.frame(County = character(), Winner = character())

#put empty data frames into a list
sheet_dfs <- c(sheet1, sheet2, sheet3, sheet4)

#pull information from different Excel sheets for each iteration (not shown here)
#and write to element of list of dataframes 
for (i in 1:3) {
  temp1 <- data.frame(c("Cobb","Clayton","Fulton"), c("Kemp","Abrams","Smith"))
  colnames(temp1) <- c("County","Winner")
  temp2 <- data.frame(c("Henry","Polk","Gwinnett"), c("Fuller","Parker","Newsome"))
  colnames(temp2) <- c("County","Winner")
  sheet_dfs[[i]] <- rbind(temp1,temp2)}

sheet1 #expecting a data frame with names, what am I doing wrong?
sheet2 #expecting a data frame with names, what am I doing wrong?
sheet3 #expecting a data frame with names, what am I doing wrong?

test <- rbind(temp1,temp2)
test #this is exactly the output I need for my dataframes sheet1,sheet2,sheet3. 
returns:
County  Winner
1     Cobb    Kemp
2  Clayton  Abrams
3   Fulton   Smith
4    Henry  Fuller
5     Polk  Parker
6 Gwinnett Newsome

1 Ответ

0 голосов
/ 01 января 2019

Во-первых, вам нужно создать правильный именованный список.Ваше первоначальное назначение списка просто создает вектор через c.Кроме того, вам необходимо правильно получить доступ к элементам списка через [[ или имя.Ниже приведена модификация вашего кода.

# set up named list programmatically
sheet_names = paste0("sheet", 1:4)
sheet_dfs = setNames(vector(length = length(sheet_names), mode = "list"), sheet_names)
# you can also create a named list as follows, which is, however, less programmatically
# sheet_dfs = list("sheet1" = sheet1, "sheet2" = sheet2, ...)

# your temp assignments...
#pull information from different Excel sheets for each iteration (not shown here)
#and write to element of list of dataframes 
for (i in 1:3) {
  temp1 <- data.frame(County = c("Cobb","Clayton","Fulton"), Winner = c("Kemp","Abrams","Smith"))
  temp2 <- data.frame(County = c("Henry","Polk","Gwinnett"), Winner = c("Fuller","Parker","Newsome"))
  sheet_dfs[[i]] <- rbind(temp1,temp2)
}

# access the list via name or index
sheet_dfs[[1]]
sheet_dfs["sheet1"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...