Подсчет вхождений в списке фреймов данных и сохранение результатов в новом фрейме данных в R - PullRequest
0 голосов
/ 23 мая 2018

У меня есть список из примерно 80 фреймов данных в следующем формате:

myTable1 <- "ID    GROUP 
     1     5     
     2     5         
     3     4.9        
     4     4.9   
     5     4.9   
     6     2.0"
Data <- read.table(text=myTable1, header = TRUE)

myTable2 <- "ID     GROUP
     1      4.9
     2      4.8
     3      4.6
     4      4.6
     5      4.6"
Data <- read.table(text=myTable2, header = TRUE)

Данные поступают из разных файлов .csv.И нет заголовков.Я сохраняю пути к ним в списке с именем file_names и читаю файлы следующим образом:

data_list <- lapply(file_names, read.csv , header=FALSE, sep=",")

Чтобы добавить заголовки, которые я использую:

data_list <- lapply(df, function(df) {colnames(df) <-c("ID", "Group"); df})

Каждый фрейм данных может содержать разные элементы встолбец «Группа», например myTable2, не содержит элемент в «Группе» со значением 2,0 или 5. Длина столбцов может не совпадать.

То, что я хочу, это подсчитать вхождения каждого элемента в столбце «Группа» каждого файла.Для сравнения количества вхождений данные должны храниться в отдельном кадре данных в следующем формате:

Group   Table 1  Table 2
  5        2        0
 4.9       3        1
 4.8       0        1   
 4.7       0        0
 4.6       0        1
 2.0       1        0

1 Ответ

0 голосов
/ 23 мая 2018
library(tidyverse)

# function that reads file and stores name of file as a column
ReadFile = function(x) {read.csv(x) %>% mutate(id=x)}

# apply function to each file and combine as a dataframe
dt = list.files(pattern = "[.]csv$") %>% map_df(ReadFile)

dt %>%
  count(id, GROUP) %>%      # count file name and group
  spread(id, n, fill = 0)   # reshape

# # A tibble: 5 x 3
#   GROUP myTable1.csv myTable2.csv
#   <dbl>        <dbl>        <dbl>
# 1   2              1            0
# 2   4.6            0            3
# 3   4.8            0            1
# 4   4.9            3            1
# 5   5              2            0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...