Есть ли способ приостановить серию каналов для сохранения временной переменной, которая может быть использована позже в последовательности каналов?
Я нашел этот вопрос , но я не уверенчто он делал то же самое, что я искал.
Вот примерный кадр данных:
library(dplyr)
set.seed(123)
df <- tibble(Grp = c("Apple","Boy","Cat","Dog","Edgar","Apple","Boy","Cat","Dog","Edgar"),
a = sample(0:9, 10, replace = T),
b = sample(0:9, 10, replace = T),
c = sample(0:9, 10, replace = T),
d = sample(0:9, 10, replace = T),
e = sample(0:9, 10, replace = T),
f = sample(0:9, 10, replace = T),
g = sample(0:9, 10, replace = T))
Я собираюсь преобразовать df
в длинный формат, но, сделав это,Мне нужно будет применить количество строк до gather
.
. Вот как будет выглядеть мой желаемый результат.В этом случае сохранение количества строк до начала канала будет выглядеть следующим образом:
n <- nrow(df)
df %>%
gather(var, value, -Grp) %>%
mutate(newval = value * n)
# A tibble: 70 x 4
Grp var value newval
<chr> <chr> <int> <int>
1 Apple a 2 20
2 Boy a 7 70
3 Cat a 4 40
4 Dog a 8 80
5 Edgar a 9 90
6 Apple a 0 0
7 Boy a 5 50
8 Cat a 8 80
9 Dog a 5 50
10 Edgar a 4 40
# ... with 60 more rows
В моей реальной проблеме у меня длинная цепочка каналов, и было бы намного проще, если бы я мог выполнитьэто действие в структуре трубы.Я хотел бы сделать что-то похожее на это:
df %>%
{ "n = nrow(.)" } %>% # temporary variable is created here but df is passed on
gather(var, value, -Grp) %>%
mutate(newval = value * n)
Я мог бы сделать что-то вроде следующего, но это кажется очень неаккуратным.
df %>%
mutate(n = nrow(.)) %>%
gather(var, value, -Grp, -n) %>%
mutate(newval = value * mean(n))
Есть ли способ сделать этоили, может быть, хороший обходной путь?