我希望我能足够具体地描述我的问题。我在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))
但是,问题是,我无法真正总结变量,因为它们要么是因子,要么我想计算它们之间的差。
答案 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创建