循环不工作并保存输出

Loop not working and saving outpout

您好,我的循环无法正常工作。它只需要最后一个变量。这是代码:

library(readxl)
library(readr)
library(plyr)
library(dplyr)

path = "C:/Users/benja/OneDrive/Studium/Bachelorarbeit/Ressourcen/Conference Calls/"
Enterprise = "ABB Ltd"

#Import Dictionary
Dictionary <- read_excel("C:/Users/benja/OneDrive/Studium/Bachelorarbeit/Ressourcen/LoughranMcDonald_MasterDictionary_2014.xlsx", 
                     sheet = "Tabelle1")
for (File in c("2016 Q1.xml","2016 Q2.xml","2016 Q3.xml","2016 Q4.txt"))
  {

  #Import Text
  ABB_2016_Q4 <- read_delim(paste0(path,Enterprise,"/",File), 
                        " ", escape_double = FALSE, col_names = FALSE, 
                        trim_ws = TRUE)

  #Umformatierung -> Zuerst Transp, Vektor, kleinbuchstaben, dataframe
  ABB_2016_Q4 = data.frame(tolower(c(t(ABB_2016_Q4))))
  colnames(ABB_2016_Q4) = "Word"

  #Zusammenführung Text-Dictionary
  Analyze_2016_Q4 = inner_join(Dictionary,ABB_2016_Q4)

  #Analyse
  Rating = sum(Analyze_2016_Q4$Rating)

}

如果我尝试用

来测试它
 print(File)

它有适当的列表,但循环无论如何都不起作用。每次循环后如何保存结果? 我想显示不同四分之一的每个评级。

您的循环可能正在运行,但目前它没有返回任何内容:)

例如,您可以将结果写入列表:

#initiate result list
allResults <- list()
#populate your filelist; depending on your directory, you can also use list.files()
files <- c("2016 Q1.xml","2016 Q2.xml","2016 Q3.xml","2016 Q4.txt")
#iterate through your files
for (i in (1:length(files))
  { #Import Text
    ABB_2016_Q4 <- read_delim(paste0(path,Enterprise,"/",files[i]), 
                        " ", escape_double = FALSE, col_names = FALSE, 
                        trim_ws = TRUE)

  #Umformatierung -> Zuerst Transp, Vektor, kleinbuchstaben, dataframe
  ABB_2016_Q4 = data.frame(tolower(c(t(ABB_2016_Q4))))
  colnames(ABB_2016_Q4) = "Word"

  #Zusammenführung Text-Dictionary
  Analyze_2016_Q4 = inner_join(Dictionary,ABB_2016_Q4)

  #Analyse & store results & add identifier:
  allResults[[i]] = data.frame(ID = paste0("Q",i), 
                               result =sum(Analyze_2016_Q4$Rating),
                               stringsAsFactors = FALSE)

}
 # flatten resultlist to a dataframe:
 allResultsDf <- do.call(rbind, allResults)

您似乎正在加载一个 'master' 文件,然后又加载了很多单独的文件并尝试将这些文件合并到主文件中。如果是这样的话,我会采取更实用的方法,而不是使用 for() 循环。

一些示例数据:

master <- data.frame(
  key = letters,
  stringsAsFactors = FALSE
)    

a <- data.frame(
  key = sample(letters, 13),
  dat = sample(1:100, 13),
  stringsAsFactors = FALSE
)

a$key
letters_reduced <- letters %in% a$key
letters_reduced <- letters[!letters_reduced]

b <- data.frame(
  key = sample(letters_reduced, 13),
  dat = sample(1:100, 13),
  stringsAsFactors = FALSE
)

readr::write_csv(a, "~/Whosebug/BenjaminBerger/a.csv")
readr::write_csv(b, "~/Whosebug/BenjaminBerger/b.csv")

所以我们在内存中有了主对象。要在 R 中加载多个文件,假设它们位于同一目录中,我将使用 list.files() 然后使用 lapply()read_csv():

遍历文件
files <- list.files("Whosebug/BenjaminBerger", pattern = "*.csv",
                    full.names = TRUE)
df <- lapply(files, readr::read_csv)

您现在有一个数据框列表。您可以通过多种方式将它们连接到您的主对象,但最简单的可能是 'collapse' 将数据帧列表合并到一个数据帧中,然后进行一次连接。这很简单:

df <- dplyr::bind_rows(df)
master <- dplyr::inner_join(master, df, by = "key")

哪个让你:

head(master)
#    key dat
#  1   a  38
#  2   b  52
#  3   c  59
#  4   d  77
#  5   e  34
#  6   f  93