我有下面的实现
library(dplyr)
library(tidyr)
dat = data.frame('A' = 1:3, 'C_1' = 1:3, 'C_2' = 1:3, 'M' = 1:3)
以下工程
dat %>% rowwise %>% mutate(Anew = list({function(x) c(x[1]^2, x[2] + 5, x[3] + 1)}(c(M, C_1, C_2)))) %>% ungroup %>% unnest_wider(Anew, names_sep = "")
但是,当我尝试使用dplyr::starts_with()
查找列名时,下面的命令不起作用
dat %>% rowwise %>% mutate(Anew = list({function(x) c(x[1]^2, x[2] + 5, x[3] + 1)}(c(M, starts_with('C_'))))) %>% ungroup %>% unnest_wider(Anew, names_sep = "")
任何关于如何在此上下文中正确应用starts_with()
的指针都将非常有帮助。
PS:这是我之前文章的延续Apply自定义函数在dplyr::rowwise()之后返回多个值
2条答案
按热度按时间kx5bkwkv1#
starts_with
必须在选择函数中使用,所以我们可以这样写。across
也是一个选择函数,所以我们可以交替使用across(M | starts_with('C_'))
代替select(...)
。c_across
也是一个选择函数,但它不保留名称。这里
group_modify
也可以工作,并且允许使用公式表示法来指定匿名函数,匿名函数中的索引已经被重新排序,以与输入中的顺序相对应。xzabzqsa2#
如果我们将
starts_with
Package 在c_across
中,并假设存在以C_
开头的第三列,则动态lambda函数将工作或者,我们可以创建一个命名为
list
的函数,并使用across
按列应用(这样会更有效),而不是使用rowwise
数据