2016-02-25 3 views
0

Позвольте мне начать с того, что я новичок в R, поэтому любое решение с подробным объяснением будет оценено, чтобы я мог учиться на нем.Как отформатировать R data.frame output?

У меня есть набор файлов CSV со следующими строками информации:

"ID" "Дата" "A" "B" (где А и В некоторых точек данных)

Я пытаясь получить результат в значимой манере и зацикливаться на том, что мне не хватает.

observations <- funtion(dir, id= 1:10){ 
    #get all file names in a vector 
    all_files <- list.files(directory, full.names=TRUE) 
    #get the subset of files we want to read 
    file_contents <- lapply(all_files[id], read.csv) 
    #cbind the file contents 
    output <- do.call(rbind, file_contents) 
    #remove all NA values 
    output <- output[complete.cases(output), ] 

    #at this point output is a data.frame so display the output 
    table(output[["ID"]]) 
} 

Мой выходной ток:

2 4 8 10 12 
1000 500 200 150 100 

, который является правильным, но мне это нужно в виде колонки, так что можно понять, посмотрев на него. Выход, который я пытаюсь получить, приведен ниже:

id obs_total 
1 2 1000 
2 4 500 
3 8 200 
4 10 150 
5 12 100 

Что мне здесь не хватает?

+3

Вы можете использовать 'as.data.frame (table (output [[" ID "]]))'. –

+0

@ danas.zuokas, так как вывод уже является фреймом данных, есть более простой способ, чем преобразование в таблицу, а затем обратно в кадр данных? В этом случае мне нужно переименовать столбец для obs_total, потому что это столбец без заголовка, иначе – Shawn

+0

ok Я понял, как переименовать столбцы после использования as.data.frame. Я использовал: colnames (output) <- c ("ID", "obs_total") – Shawn

ответ

1

table выводит таблицу на случай непредвиденных обстоятельств. Вам нужен фрейм данных. Вы можете обернуть as.data.frame(...) вокруг вас, чтобы преобразовать его.

as.data.frame(table(ID = output[["ID"]])) 
+0

вывод уже является фреймом данных. будет ли более короткий путь? В случае выхода я беру много строк и «конденсирую» их по идентификатору с общим числом наблюдений – Shawn

+0

Ваш кадр данных представляет собой кадр данных, но «таблица» выводит таблицу непредвиденных ситуаций (это причудливая матрица). Я не знаю, каково ваше определение «короткое», но трудно представить мир, в котором 20 дополнительных символов кода на линии недостаточно коротки. – Adam

+0

Я изучаю, поэтому я просто имел в виду, если я сначала не конвертирую его в таблицу, могу ли я сделать то же самое в меньшем количестве строк – Shawn

0

Предполагая, что цифры верны, похоже, что у вас есть все, что вам нужно, просто транспонируйте фрейм данных. Попробуйте это:

mat<-matrix(round(runif(10),3),nrow=2) 
df<-as.data.frame(mat) 
colnames(df)=c("1","2","3","4","5") 
t(df) 
+0

sorry dan. Я не обновил свои тестовые данные в вопросе. Мне не нужна круглая функция. – Shawn

Смежные вопросы