tidyr 传播键值对的子集
tidyr spread subset of key-value pairs
鉴于示例数据,我想要 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
我们可以在 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' 列,同时对 [=24] 进行子集化=]对应于'c'
df1 %>%
filter(n != "c") %>%
mutate(c = df1$s[df1$n=="c"])
鉴于示例数据,我想要 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
我们可以在 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' 列,同时对 [=24] 进行子集化=]对应于'c'
df1 %>%
filter(n != "c") %>%
mutate(c = df1$s[df1$n=="c"])