我有一个两列的桌子,我想散布。我知道这是一个非常受欢迎且经过充分研究的主题,但是,我尝试了几种方法,但没有得到我想要的。欢迎任何建议和投诉。
我的桌子上满是三个女人的数据。总共有5个类别,总的来说,每个类别都充满了价值。但是某些女性数据丢失了,导致整行都不存在-请注意Jane
缺少有关weight
的信息。
a = data.frame(categories = c("name", "sex", "age", "weight", "high",
"name", "sex", "age", "high",
"name", "sex", "age", "weight", "high"),
values = c("Emma", "female", "32", "72", "175",
"Jane", "female", "28", "165",
"Emma", "female", "42", "63", "170"))
categories values
1 name Emma
2 sex female
3 age 32
4 weight 72
5 high 175
6 name Jane
7 sex female
8 age 28
9 high 165
10 name Emma
11 sex female
12 age 42
13 weight 63
14 high 170
我想从categories
-列和values
-行中获取。但是有两个主要问题:
1]键是共享的-两个Emmas(因此我无法使用spread
或reshape
)
2)可能缺少某些类别-例如简的体重(因此我无法使用pivot
或split
)
最后,我想重塑数据以获得这样的表:
name sex age weight high
Emma female 32 72 175
Jane female 28 NA 165
Emma female 42 63 170
假设每个条目始终存在'name'
,我们可以创建一个标识符列并使用pivot_wider
进行整形。
library(dplyr)
a %>%
group_by(grp = cumsum(categories == 'name')) %>%
tidyr::pivot_wider(names_from = categories, values_from = values) %>%
ungroup %>%
select(-grp)
# name sex age weight high
# <chr> <chr> <chr> <chr> <chr>
#1 Emma female 32 72 175
#2 Jane female 28 NA 165
#3 Emma female 42 63 170