r - tidyr键值对的传播子集

标签 r tidyr spread

给定示例数据,我想对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

最佳答案

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

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,我们在不带'c'行的情况下filter,然后通过mutate创建'c'列,同时设置与'c'相对应的's'
df1 %>% 
   filter(n != "c") %>% 
   mutate(c = df1$s[df1$n=="c"])

关于r - tidyr键值对的传播子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50146421/

相关文章:

r - 在 dplyr 的特定列范围内使用 mutate case_when()

r - 按时间和 id r 传播字符列

r - 在 R 中删除一元变量

r - 如何改进此代码以获得成对?

r - R 中的交互式热图

r - R 代码中 pivot_longer 函数的问题

jquery - CSS3 - 仅使用 jquery 缩放框阴影

python Pandas 枢轴: How to do a proper tidyr-like spread?

list - 列表中的数据框;添加一个名为数据框的新变量

r - 将 fun arg/省略号中的所有内容折叠成字符串