【发布时间】:2021-07-01 13:27:01
【问题描述】:
我正在尝试处理一些汇总数据。我希望数据采用整洁的格式,但我不确定如何做到这一点而不会得到许多 value 变量。组织这些数据的正确方法是什么?我已经四处寻找,但找不到任何东西。
这是一个例子:
#create the dataframe
df <- data.frame('date' = seq(as.Date('2019-01-15'), as.Date('2019-04-15'), 'months'),
'total' = c(2, 4, 1, 6),
'age.0-6' = c(1, 4, 0, 3),
'age.7-12' = c(1, 0, 1, 3),
'race.white' = c(1, 2, 0, 2),
'race.black' = c(1, 2, 1, 2),
'race.other' = c(0, 0, 1, 2))
#print the dataframe
df
date total age.0_6 age.7_12 race.white race.black race.other
1 2019-01-15 2 1 1 1 1 0
2 2019-02-15 4 4 0 2 2 0
3 2019-03-15 1 0 1 0 1 1
4 2019-04-15 6 3 3 2 2 2
这里的问题是我不知道各个类别,因为数据都是汇总的。例如,对于 2014 年 4 月,我不知道 0-6 岁的比赛是否是:
2 个其他和 1 个白色;或
2个白色和1个黑色;或
1 个黑色、1 个白色和 1 个其他。
因此,我无法获得每个变量的唯一列,每个结果都有一个值。所以我不能用通常的方式整理。
相反,我可以整理年龄和种族,并为每个人设置值列。第一个简单的问题是更改 value 变量的名称,但更大的问题仍然是我有很多变量,每个变量都有一个等价的值。
这是一个简单的例子:
df %>%
pivot_longer(c(age.0_6, age.7_12), names_to = 'age') %>% #pivot age data
mutate(age = gsub('[a-z]+\\.', '', age)) %>% #clean the age variable
pivot_longer(c(race.white, race.black, race.other), names_to = 'race', values_to = 'count') %>% #pivot the race data (use 'count' instead of 'value'
mutate(race = gsub('[a-z]+\\.', '', race)) #clean the race data
# A tibble: 24 x 6
date total age value race count
<date> <dbl> <chr> <dbl> <chr> <dbl>
1 2019-01-15 2 0_6 1 white 1
2 2019-01-15 2 0_6 1 black 1
3 2019-01-15 2 0_6 1 other 0
4 2019-01-15 2 7_12 1 white 1
5 2019-01-15 2 7_12 1 black 1
6 2019-01-15 2 7_12 1 other 0
7 2019-02-15 4 0_6 4 white 2
8 2019-02-15 4 0_6 4 black 2
9 2019-02-15 4 0_6 4 other 0
10 2019-02-15 4 7_12 0 white 2
# ... with 14 more rows
这显然不是一个整洁的格式,而且数据非常难以管理。当我拥有大量年龄段、大量种族类别以及许多其他汇总特征:性别、残疾、收入等级等时,这个问题很快就会变得巨大。
对组织此类数据的最佳方式有何想法?我假设它足够普遍并且有最佳实践。
【问题讨论】:
-
似乎有 14 个人按种族确定,但总共只有 13 个人和年龄。您想如何处理不一致的数据,这大概也可能出现在您的真实数据中?