【问题标题】:tidyr spread subset of key-value pairstidyr 扩展键值对的子集
【发布时间】:2023-05-20 23:01:01
【问题描述】:

鉴于示例数据,我想spread key-value 对的一个子集。在这种情况下,它只是一对。但是,在其他情况下,spread 的子集不止一对。

library(tidyr)
# dummy data
> df1 <- data.frame(e = c(1, 1, 1, 1),
              n = c("a", "b", "c", "d") ,
              s = c(1, 2, 5, 7))
> df1
  e n s
1 1 a 1
2 1 b 2
3 1 c 5
4 1 d 7

所有键值对的经典传播:

> df1 %>% spread(n,s)

  e a b c d
1 1 1 2 5 7

所需的输出,仅传播n=c

  e c n s
1 1 5 a 1
2 1 5 b 2
3 1 5 d 7

【问题讨论】:

    标签: r tidyr spread


    【解决方案1】:

    我们可以在spread 之后做一个gather

    df1 %>%
      spread(n, s) %>% 
      gather(n, s, -c, -e)
    #  e c n s
    #1 1 5 a 1
    #2 1 5 b 2
    #3 1 5 d 7
    

    或者代替spread/gather,我们filter没有'c'行,然后mutate创建'c'列,同时将's'对应于'c'的子集

    df1 %>% 
       filter(n != "c") %>% 
       mutate(c = df1$s[df1$n=="c"])
    

    【讨论】: