r - 如何使用 dplyr 为函数传递单行
问题描述
我正在尝试将自定义函数逐行应用于 data.frame,但我无法弄清楚如何逐行应用该函数。我正在尝试rowwise()
如下简单的人工示例:
library(tidyverse)
my_fun <- function(df, col_1, col_2){
df[,col_1] + df[,col_2]
}
dff <- data.frame("a" = 1:10, "b" = 1:10)
dff %>%
rowwise() %>%
mutate(res = my_fun(., "a", "b"))
数据如何不会按行传递。我怎样才能做到这一点?
解决方案
dplyr
'srowwise()
将行输出 ( .data
) 作为列表列表,因此您需要使用[[
. 您还需要使用.data
而不是.
,因为.
是整个dff
行,而不是单个行。
my_fun <- function(df, col_1, col_2){
df[[col_1]] + df[[col_2]]
}
dff %>%
rowwise() %>%
mutate(res = my_fun(.data, 'a', 'b'))
您可以.data
使用下面的代码查看外观
dff %>%
rowwise() %>%
do(res = .data) %>%
.[[1]] %>%
head(1)
# [[1]]
# [[1]]$a
# [1] 1
#
# [[1]]$b
# [1] 1
推荐阅读
- python - 从守护进程读取响应标头时超时。mod_wsgi,python,烧瓶
- eclipse - 如何修复损坏的 birt excel 报告?
- linux - Ansible:将文件从主机复制到网络机器
- pytorch - 将训练指标记录到 csv 文件
- r - 使用构造函数来固定参数:它是如何工作的?
- ionic-framework - IonSegmentButton 未正确对齐
- java - RegexFilter - 如何转义点( . )并过滤掉某些消息?
- gitlab - Gitlab-CI:组合两个覆盖率报告,它们位于不同存储库中的不同工件中
- authentication - 使用 AWS Cognito 对多个用户池进行 Hasura 身份验证
- c++ - 是否有一种标准方法来保持智能指针成员中基础对象的 const 正确性?