R:使用共享密钥和丢失的数据传播data.frame / tibble

问题描述 投票:0回答:1

我有一个两列的桌子,我想散布。我知道这是一个非常受欢迎且经过充分研究的主题,但是,我尝试了几种方法,但没有得到我想要的。欢迎任何建议和投诉。

我的桌子上满是三个女人的数据。总共有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(因此我无法使用spreadreshape

2)可能缺少某些类别-例如简的体重(因此我无法使用pivotsplit

最后,我想重塑数据以获得这样的表:

     name  sex    age  weight  high
     Emma  female 32   72      175
     Jane  female 28   NA      165
     Emma  female 42   63      170
r dataframe reshape tidyr
1个回答
0
投票

假设每个条目始终存在'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  
© www.soinside.com 2019 - 2024. All rights reserved.