【问题标题】:creating variables in for loops and assigning values在 for 循环中创建变量并赋值
【发布时间】:2020-09-14 18:38:05
【问题描述】:

我有一个包含多个工作表的 excel 文件,并将每个工作表分配给一个单独的变量。我决定尝试这样的 for 语句:

  x = 2
for (i in 1:6){
  x <- x + 1
  assign(paste0(i,"_file"), read.xlsx(file.path(path,"Template.xlsx"), sheetIndex = x, colIndex = 1:5, startRow = 6, stringsAsFactors=FALSE)
) 

#remove rows where the entire row is NA (do not remove rows that have some values and/or NA, has to be completely NA)
  paste0(i,"_file")<- paste0(i,"_file") %>% filter_at(colnames(paste0(i,"_file")), any_vars(!is.na(.)))

}

问题是我不知道如何在使用 assign() 后删除行。在将每张工作表分配给一个变量后,我想做一些清理并删除全部为 NA 的行。我尝试使用 paste0 和


更新:

使用列表:] 但如何删除每个数据框的最后 4 行?

  x = 2
for (i in 1:6){
  x <- x + 1
  scoring_raw[[i]] <- read.xlsx(file.path(path,"Template.xlsx"), sheetIndex = x, colIndex = 1:5, startRow = 6, stringsAsFactors=FALSE) %>%
    filter_all(any_vars(!is.na(.))) %>% #want to remove last 4 rows of dataframe


}

【问题讨论】:

标签: r


【解决方案1】:

虽然@Parfait 是完全正确的,您应该更喜欢使用列表,但您可以使用evalparse 来回答您的问题。但是您需要将索引i 放在对象名称的末尾,而不是开头,以避免出现问题:

x = 2
for (i in 1:6){
  x <- x + 1
  assign(paste0("file_",i), read.xlsx(file.path(path,"Template.xlsx"), sheetIndex = x, colIndex = 1:5, startRow = 6, stringsAsFactors=FALSE)
  ) 
  
  #remove rows where the entire row is NA (do not remove rows that have some values and/or NA, has to be completely NA)
  assign(paste0("file_",i), 
         eval(parse(text = paste0("file_",i))) %>% 
           filter_all(any_vars(!is.na(.)))
  
}

您可以在选择所有列时将filter_at 更改为filter_all。但你实际上可以这样做:

for (i in 1:6){
  x <- x + 1
  assign(paste0("file_",i), 
         read.xlsx(file.path(path,"Template.xlsx"), sheetIndex = x, colIndex = 1:5, startRow = 6, stringsAsFactors=FALSE) %>%
           filter_all(any_vars(!is.na(.)))
  ) 
}

【讨论】:

  • 谢谢,您知道如何从 %>% 之后的数据框中删除最后 4 行吗?我已经更新了我上面的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 2016-04-28
  • 2012-10-24
相关资源
最近更新 更多