Как объединить несколько строк в зависимости от уровня фактора? - PullRequest
0 голосов
/ 15 ноября 2018

Я надеюсь, что смогу достаточно подробно описать свой вопрос.У меня очень большой фрейм данных в R. В этом фрейме данных у меня иногда есть одна строка для одного человека, а иногда у меня есть две строки для одного человека.Теперь я хочу объединить строки, если люди идентичны (имеют одинаковый уровень фактора на фактор человека).Однако все мои переменные, кроме двух, идентичны, если коэффициент уровня одинаков.Две переменные, которые не идентичны, являются факторами и нуждаются в информации из обеих строк, поэтому вторая строка должна быть указана в качестве нового столбца для первой строки.

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

Вот так выглядят мои данные, за исключением того, что кадр данных намного больше:

  zz <- "Person Address Happening Date Job
     John         abc Birth         22/03/1940        IT
     John         abc   Death       22/10/2018        IT         
      Sarah        cde      Birth    10/07/1930        Teacher
      Sarah        cde     Death     01/07/2000        Teacher
      Susi         bfg     Birth     01/01/1990       secretary"
Data <- read.table(text=zz, header = TRUE)

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

Все, что я мог найти, это коды вроде этого:

mtcars %>%
group_by(cyl) %>%
summarise(disp = mean(disp), sd = sd(disp))

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

1 Ответ

0 голосов
/ 15 ноября 2018

Я думаю, что вы пытаетесь преобразовать данные в длинном формате в широкий формат. Вы можете сделать это, используя функцию spread():

library(tidyverse)
zz <- "Person Address Happening Date Job
     John         abc Birth         22/03/1940        IT
     John         abc   Death       22/10/2018        IT         
      Sarah        cde      Birth    10/07/1930        Teacher
      Sarah        cde     Death     01/07/2000        Teacher
      Susi         bfg     Birth     01/01/1990       secretary"
Data <- read.table(text=zz, header = TRUE)
Data
#>   Person Address Happening       Date       Job
#> 1   John     abc     Birth 22/03/1940        IT
#> 2   John     abc     Death 22/10/2018        IT
#> 3  Sarah     cde     Birth 10/07/1930   Teacher
#> 4  Sarah     cde     Death 01/07/2000   Teacher
#> 5   Susi     bfg     Birth 01/01/1990 secretary

spread(Data, Happening, Date)
#>   Person Address       Job      Birth      Death
#> 1   John     abc        IT 22/03/1940 22/10/2018
#> 2  Sarah     cde   Teacher 10/07/1930 01/07/2000
#> 3   Susi     bfg secretary 01/01/1990       <NA>

Создано в 2018-11-15 пакетом представ. (v0.2.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...