使用dplyr将函数应用于行中的选定列
新的使用dplyr将函数应用于行中的选定列,r,dplyr,row,R,Dplyr,Row,新的dplyr1.0.0版实现了这一点 跨允许在整列上应用函数,例如使用排序和所有内容(): 但是有没有一种方法可以直接到达: V1 V2 V3 V4 V5 1 1 3 5 5 5 2 2 2 4 5 5 3 1 1 2 2 3 4 1 1 2 2 3 5 1 1 4 5 5 与列的情况一样?我们可以直接使用pmap,而不是跨行/c\u的两个步骤 library(dplyr) library(purrr) df %>%
dplyr
1.0.0版实现了这一点
跨
允许在整列上应用函数,例如使用排序
和所有内容()
:
但是有没有一种方法可以直接到达:
V1 V2 V3 V4 V5
1 1 3 5 5 5
2 2 2 4 5 5
3 1 1 2 2 3
4 1 1 2 2 3
5 1 1 4 5 5
与列的情况一样?我们可以直接使用
pmap
,而不是跨行/c\u的两个步骤
library(dplyr)
library(purrr)
df %>%
pmap_dfr(~ set_names(sort(c(...)), names(df)))
# A tibble: 5 x 5
# V1 V2 V3 V4 V5
# <int> <int> <int> <int> <int>
#1 1 3 5 5 5
#2 2 2 4 5 5
#3 1 1 2 2 3
#4 1 1 2 2 3
#5 1 1 4 5 5
谢谢@akrun的回答。它是否也适用于任何情况,例如,如果我使用select(is.numeric)而不是everything()?谢谢@akrun,transmute
正是我想要的@谢谢你。我在想你之前对select的评论。你能更新你的帖子吗that@Waldi我更新了这篇文章,但它似乎对我来说仍然不直接。dplyr
使处理行变得容易,但我认为它仍然不是处理行操作的最佳工具。@Ronak Shah,谢谢你的评论:我同意,处理行越来越容易了,但与圆柱相比,它还不是完全对称的
V1 V2 V3 V4 V5
1 1 3 5 5 5
2 2 2 4 5 5
3 1 1 2 2 3
4 1 1 2 2 3
5 1 1 4 5 5
library(dplyr)
library(purrr)
df %>%
pmap_dfr(~ set_names(sort(c(...)), names(df)))
# A tibble: 5 x 5
# V1 V2 V3 V4 V5
# <int> <int> <int> <int> <int>
#1 1 3 5 5 5
#2 2 2 4 5 5
#3 1 1 2 2 3
#4 1 1 2 2 3
#5 1 1 4 5 5
library(tidyr)
df %>%
rowwise %>%
transmute(sortlist = list(sort(c_across(everything())))) %>%
unnest_wider(c(sortlist)) %>%
set_names(names(df))
# A tibble: 5 x 5
# V1 V2 V3 V4 V5
# <int> <int> <int> <int> <int>
#1 1 3 5 5 5
#2 2 2 4 5 5
#3 1 1 2 2 3
#4 1 1 2 2 3
#5 1 1 4 5 5
df %>%
rowwise %>%
transmute(V1, V2, sortlist = list(sort(c_across(V3:V5)))) %>%
unnest_wider(c(sortlist)) %>%
set_names(names(df))