【发布时间】:2022-01-14 18:54:27
【问题描述】:
考虑数据框:
df <- data.frame(x = c(1,2,1,1), y = c("a", "a", "b", "a"))
通过应用下面的代码
library(tidyverse)
df %>%
pivot_wider(x, names_from = y, values_from = y, values_fn = length, names_prefix = "tot_", values_fill = 0) %>%
mutate(per_a = 100*tot_a / rowSums(select(.,starts_with("tot_")))) %>%
mutate(per_b = 100*tot_b / rowSums(select(.,starts_with("tot_"))))
一个人得到结果
<dbl> <int> <int> <dbl> <dbl>
1 1 2 1 66.7 33.3
2 2 1 0 100 0
我的问题是:是否有可能使用pivot_wider 的单个 调用获得相同的结果,也就是说,没有任何mutate?
【问题讨论】:
-
proportions(table(df), 1)*100呢? -
谢谢,@Onyambu。但是,我的问题的动机是找出是否可以通过使用单个
pivot_wider来完成这样的结果。 -
我不这么认为。
value_fn是一个聚合函数,因此在这种情况下不符合条件。可能只有一个 mutate 调用 -
文档说
value_fn可以是函数列表,@Onyambu。 -
是的,所有聚合。即他们按组工作并给出统一/单一的结果。在您的情况下,您有 a 组和 b 组,它们是依赖的,因为 66.7 是通过在除法之前计算 a AND B 中的所有值而获得的。