如何根据因子级别组合多行?

时间:2018-11-15 15:43:00

标签: r

我希望我能足够具体地描述我的问题。我在R中有一个非常大的数据框。在此数据框中,有时我一个人一行,而有时我却一个人两行。现在,如果人员是相同的,我想合并行(在人员因素上具有相同的因素级别)。但是,如果因子Level相同,则除两个变量以外的所有变量都是相同的。两个不相同的变量是因素,并且需要两行的信息,因此第二行应作为第一行的新列列出。

我希望有人能帮助我,非常感谢。很抱歉,如果问题仍然不清楚,我很乐意回答其他问题。

这是我的数据,除了数据框更大:

  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 :(得分:0)

我认为您正在尝试将长格式的数据转换为宽格式。您可以使用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>

reprex package(v0.2.1)于2018-11-15创建