我有一个使用`dplyr处理许多不同数据帧的函数,如下所示:
some_function <- function(some_data){
processed_data = some_data %>%
group_by(session_id) %>%
arrange(some_date) %>%
mutate(n = row_number()) %>%
filter(n == 1) %>%
select(-n)
}
传递给函数的数据框每个都共享几个键列名,但其他的不同。在这个函数中,我通常只处理共享列名,因此引用它们很简单。
异常是希望arrange()
通过一些在数据帧之间系统地不同的变量。例如它可能是一个在一个数据框中名为a_date
但在另一个数据框中名为b_date
的列。
所以我想操作以_date
结尾的列名。有一些方法可以使用整个列名的字符串表示来操作,但使用某种匹配更为棘手。 select()
中的dplyr
函数可以使用ends_with()
等函数选择列。但是如何在其他dplyr
动词中实现这一点,例如arrange()
?
答案 0 :(得分:2)
您可以使用范围动词arrange_at
;对于您的情况,请将arrange_at
与vars
+选择帮助函数%>% arrange_at(vars(ends_with('_date')))
一起使用。
实施例:
df <- data.frame(a_date = c(3,1,4,4), b_date = c(1,3,4,2))
安排在a_date
栏上:
arrange_at(df, vars(starts_with('a')))
# a_date b_date
#1 1 3
#2 3 1
#3 4 4
#4 4 2
安排在b_date
栏上:
arrange_at(df, vars(starts_with('b')))
# a_date b_date
#1 3 1
#2 4 2
#3 1 3
#4 4 4
排列a_date
栏,然后b_date
:
arrange_at(df, vars(ends_with('date')))
# a_date b_date
#1 1 3
#2 3 1
#3 4 2
#4 4 4