需要帮助重塑R中的数据集

时间:2020-07-22 05:41:47

标签: r dplyr tidyverse tidyr

我有一个看起来像这样的数据集:

Name. Position number.student? Married?

Bob. 0001. YES. NO.
Susan. 0002. YES. YES.
Mark. 0003. NO.NO
Becky.0004.NO.YES
Billy.0005.YES.YES

我需要它看起来像这样:

Bob. 0001. YES. NO.
Susan. 0002. YES. NO.
Susan.0002.NO.YES
Mark. 0003. NO.NO
Becky.0004.NO.YES
Billy.0005.YES.NO
Billy.0005.NO.YES

换句话说,我有多个列标题,其值为“是”和“否”。我需要为每个“是”分配一行,每个人都有多少必要的行,具体取决于他们拥有多少个“是”值。

如何在R中完成此操作?

1 个答案:

答案 0 :(得分:0)

一种方法是获取长格式的数据,仅查看await行,为每个async创建一个序列列,并获取宽格式的数据,用{{1}填充空值}。

async.eachSeries(itemArr, async (item, loop) => {
    await DB.count({ duration: item.duration, service: item.service});  working
    // Adding more logic
});

但是,这会删除"YES"具有两个Name的值,这是@Walker Harrison建议的细微变化。

"NO"

数据

library(dplyr)
library(tidyr)

df %>%
  pivot_longer(cols = student:Married) %>%
  filter(value == 'YES') %>%
  group_by(Name) %>%
  mutate(row = row_number()) %>%
  pivot_wider(values_fill = "NO") %>%
  select(-row)


#  Name  Positionnumber student Married
#  <chr>          <int> <chr>   <chr>  
#1 Bob                1 YES     NO     
#2 Susan              2 YES     NO     
#3 Susan              2 NO      YES    
#4 Becky              4 NO      YES    
#5 Billy              5 YES     NO     
#6 Billy              5 NO      YES