Как взять элементы данных в наборе данных и превратить их в строки и столбцы? - PullRequest
0 голосов
/ 27 апреля 2020

Прежде чем я начну, я должен был никогда не использовать R до вчерашнего дня, я знаю только немного Python и я очень начинающий. Я использую R, потому что не могу понять, как сделать что-то в Excel, и уже добился большего прогресса в R.

Так что у меня, казалось бы, уникальная проблема, которую я пытаюсь решить. У меня есть набор данных, который выглядит примерно так:

      ID     Contaminant     
 1    123    Lead            
 2    123    Copper          
 3    456    Lead            
 4    678    Iron            
 5    456    Lead            
 6    111    Iron            
 7    222    Arsenic         

Я хочу взять эти данные и создать из них новый файл xlsx или csv для анализа данных. Я хочу посмотреть, сколько раз в удостоверении личности было загрязнитель и что это за загрязнение. Я (думаю) я выяснил, как выяснить уникальные значения того, сколько идентификаторов связано с типом загрязнителя и сколько идентификаторов имеют уникальный загрязнитель, связанный с ними. Если это имеет смысл.

Я хочу, чтобы новый лист данных выглядел примерно так:

   ID     Lead     Copper     Iron     Arsenic
   123    1        2          0        0  
   456    2        0          0        0
   678    0        0          1        0
   111    0        0          1        0
   222    0        0          0        0

До сих пор я выяснил, как взять мой исходный лист данных, который содержит много переменных и превратить его в первый набор данных, который я перечислил выше, который содержит только идентификаторы и загрязняющие вещества.

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

violations <- tbl_df(2015_Violations)
new_violations <- select(violations, -TypeofViolation, -"CODETypeof Vio")

with(unique(violations[c("ID","Contaminant")]), table(Contaminant))
with(unique(violations[c("ID","Contaminant")]), table(ID))

write.csv(new_violations, file = "C:/r_stuff/new_violations.csv",
           row.names = F)

Это выкладывает уникальные номера загрязнителей и идентификаторы в некоторые таблицы.

Затем я использую другой файл .R для проверки этого нового файла .csv. Он просто содержит следующее:

mydata <- read.csv("C:/r_stuff/new_violations.csv")
View(mydata)

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

1 Ответ

0 голосов
/ 27 апреля 2020

Я предлагаю сделать это так:

library(tidyverse)

data %>% 
  group_by(ID, Contaminant) %>% 
  mutate(Count = n()) %>% 
  distinct() %>% 
  pivot_wider(names_from = Contaminant, values_from = Count) %>%
  ungroup() %>% 
  mutate_all(replace_na, 0)

, где:

data <-
  tibble(
    ID = c(123, 123, 456, 678, 456, 111, 222),
    Contaminant = c("Lead", "Copper", "Lead", "Iron", "Lead", "Iron", "Arsenic")
  )

Это дает:

# A tibble: 5 x 5
     ID  Lead Copper  Iron Arsenic
  <dbl> <dbl>  <dbl> <dbl>   <dbl>
1   123     1      1     0       0
2   456     2      0     0       0
3   678     0      0     1       0
4   111     0      0     1       0
5   222     0      0     0       1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...