考虑iris
数据集,假设我想创建一个列count
,如果“sepal”列的值在1到5之间。
这是我的想法
iris %>% rowwise() %>%
mutate(count = sum(if_any(contains("sepal", ignore.case = TRUE),
.fns = ~ between(.x, 1, 5)))) %>%
arrange(desc(count))
但是输出不是我想要的。
Sepal.Length Sepal.Width Petal.Length Petal.Width Species count
<dbl> <dbl> <dbl> <dbl> <fct> <int>
1 5.1 3.5 1.4 0.2 setosa 1 # Should be 1
2 4.9 3 1.4 0.2 setosa 1 # Should be 2
3 4.7 3.2 1.3 0.2 setosa 1 # Should be 2
4 4.6 3.1 1.5 0.2 setosa 1 # Should be 2
5 5 3.6 1.4 0.2 setosa 1 # Should be 2
6 5.4 3.9 1.7 0.4 setosa 1 # Should be 1
7 4.6 3.4 1.4 0.3 setosa 1 # Should be 2
8 5 3.4 1.5 0.2 setosa 1 # Should be 2
9 4.4 2.9 1.4 0.2 setosa 1 # Should be 2
10 4.9 3.1 1.5 0.1 setosa 1 # Should be 2
我可以对这两列使用case_when
或if_else
,但 * 实际数据集的列要多得多。* 因此,我正在寻找一个dplyr
解决方案,在该解决方案中,我不必键入所有列。
1条答案
按热度按时间e4yzc0pl1#
编辑:
以我的理解,
c_across
必须与rowwise()
一起使用才能进行行聚合和计算。