如何总结自定义dplyr函数中的变量列表?
起点: 我有一个数据集(TIBLE),其中包含许多同一类(dbl)的变量。它们属于不同的环境。缺少变量(TIBLE中的列)。这是属于一个设置的所有变量的行和 目标: 我的目标是为每个设置生成具有相同数据结构的子数据集,包括“rowSum”变量(我称之为“s1”) 问题: 在每个设置中都有不同数量的变量(当然它们的命名也不同)。 因为它应该是具有不同变量的相同结构,这是函数的典型情况 问题: 如何使用dplyr解决此问题 我写了一个函数来 (1) 为兴趣设置(正在工作)和 (2) 尝试对设置的变量进行行和运算(不起作用;为什么?) 由于该函数用于特殊设计的数据集,因此该函数包含两个预定义变量: 天-调查期间的任何一天 N-这是在这个特殊的日子里调查的案件数量 谢谢你的帮助如何总结自定义dplyr函数中的变量列表?,r,function,dplyr,R,Function,Dplyr,起点: 我有一个数据集(TIBLE),其中包含许多同一类(dbl)的变量。它们属于不同的环境。缺少变量(TIBLE中的列)。这是属于一个设置的所有变量的行和 目标: 我的目标是为每个设置生成具有相同数据结构的子数据集,包括“rowSum”变量(我称之为“s1”) 问题: 在每个设置中都有不同数量的变量(当然它们的命名也不同)。 因为它应该是具有不同变量的相同结构,这是函数的典型情况 问题: 如何使用dplyr解决此问题 我写了一个函数来 (1) 为兴趣设置(正在工作)和 (2) 尝试对设置的变量
mkr.sumsetting <- function(...,dataset){
subvars <- rlang::enquos(...)
#print(subvars)
# Summarize the variables belonging to the interessting setting
dfplot <- dataset %>%
dplyr::select(day,N,!!! subvars) %>%
dplyr::mutate(s1 = rowSums(!!! subvars,na.rm = TRUE))
return(dfplot)
}
mkr.sumsetting我们可以将其更改为字符串,并使用as_name
为行和的[
子集数据集
library(rlang)
library(purrr)
library(dplyr)
mkr.sumsetting <- function(...,dataset){
subvars <- rlang::enquos(...)
v1 <- map_chr(subvars, as_name)
#print(subvars)
# Summarize the variables belonging to the interessting setting
dfplot <- dataset %>%
dplyr::select(day, N, !!! subvars) %>%
dplyr::mutate(s1 = rowSums( .[v1],na.rm = TRUE))
return(dfplot)
}
out <- mkr.sumsetting(col1, col2, dataset = df1)
head(out, 3)
# day N col1 col2 s1
#1 1 20 -0.5458808 0.4703824 -0.07549832
#2 2 20 0.5365853 0.3756872 0.91227249
#3 3 20 0.4196231 0.2725374 0.69216051
数据
set.seed(24)
df1请将数据包括到。谢谢!它是有效的。我想我现在已经理解了dplyr函数的编程思想。
mkr.sumsetting <- function(...,dataset){
subvars <- rlang::enquos(...)
#print(subvars)
# Summarize the variables belonging to the interessting setting
dfplot <- dataset %>%
dplyr::select(day, N, !!! subvars) %>%
dplyr::mutate(s1 = dplyr::select(., !!! subvars) %>%
rowSums(na.rm = TRUE))
return(dfplot)
}
mkr.sumsetting(col1, col2, dataset = df1)
set.seed(24)
df1 <- data.frame(day = 1:20, N = 20, col1 = rnorm(20),
col2 = runif(20))