2015-12-22 2 views
-2

У меня есть несколько csv, каждый из которых содержит несколько наблюдений для одного участника по нескольким переменным. Скажем, каждый файл CSV выглядит как ниже, и имя файла указывает на участника ID:R найти максимумы нескольких переменных из нескольких файлов .CSV

data.frame(
    happy = sample(1:20, 10), 
    sad = sample(1:20, 10), 
    angry = sample(1:20, 10) 
) 

Я нашел некоторый код в отличном StackOverflow ответ, который позволяет мне получить доступ ко всем файлам, сохраненным в определенную папку , вычислить суммы этих эмоций, и выводить их в файл:

# access all csv files in the working directory 
fileNames <- Sys.glob("*.csv") 

for (fileName in fileNames) { 

    # read original data: 
    sample <- read.csv(fileName, 
        header = TRUE, 
        sep = ",") 

    # create new data based on contents of original file: 
    data.summary <- data.frame(
    File = fileName, 
    happy.sum = sum(sample$happy), 
    sad.sum = sum(sample$sad), 
    angry.sum = sum(sample$angry)) 

    # write new data to separate file: 
    write.table(data.summary, 
       "sample-allSamples.csv", 
       append = TRUE, 
       sep = ",", 
       row.names = FALSE, 
       col.names = FALSE)} 

Однако, я могу только получить «сумму», чтобы работать в этой функции. Я хотел бы не только найти суммы каждой эмоции для каждого участника, но и максимальное значение каждого из них.

Когда я пытаюсь изменить выше:

for (fileName in fileNames) { 

     # read original data: 
     sample <- read.csv(fileName, 
         header = TRUE, 
         sep = ",") 

     # create new data based on contents of original file: 
     data.summary <- data.frame(
     File = fileName, 
     happy.sum = sum(sample$happy), 
     happy.max = max(sample$happy), 
     sad.sum = sum(sample$sad), 
     angry.sum = sum(sample$angry)) 

     # write new data to separate file: 
     write.table(data.summary, 
        "sample-allSamples.csv", 
        append = TRUE, 
        sep = ",", 
        row.names = FALSE, 
        col.names = FALSE)} 

Я получаю следующее предупреждение: В макс (образец $ счастливые): нет, не пропущенных аргументов макс; возвращение -Inf

Искренне благодарен за любой совет, который может дать мне!

+0

В конце концов после прочтения одного файла имя столбца не является «счастливым» (например, 'Happy'). Управляйте структурой шаблона data 'sample' путем печати' str (sample) ' – jogo

+1

Подумайте также о том, что вы пишете файл« sample-allSamples.csv ». Если вы запустите свой скрипт во второй раз, этот файл находится в списке имен файлов 'FileNames <- Sys.glob (" *. Csv ")' – jogo

ответ

1

используя ваши тестовые данные, инструкция max() отлично работает для меня. Связано ли это с расхождением между приведенным вами образцом кода и фактической структурой файлов CSV?