R 函数未按预期方式计算变量
我正在尝试编写一个R函数来生成一个频率表,这样我就可以在不重复输入的情况下标准化格式等。唯一的问题是我不能让它正确地计算分组变量 下面是一些代码,用于获取迷你数据集以重现问题:R 函数未按预期方式计算变量,r,function,frequency,tidyverse,nse,R,Function,Frequency,Tidyverse,Nse,我正在尝试编写一个R函数来生成一个频率表,这样我就可以在不重复输入的情况下标准化格式等。唯一的问题是我不能让它正确地计算分组变量 下面是一些代码,用于获取迷你数据集以重现问题: library(tidyverse) id <- sample(1:500, 5) factors <- sample(1:3, 5, replace = TRUE) data <- data.frame(id, factors) freqTable <- function(x, fie
library(tidyverse)
id <- sample(1:500, 5)
factors <- sample(1:3, 5, replace = TRUE)
data <- data.frame(id, factors)
freqTable <- function(x, field){
Table <- x %>%
group_by(field) %>%
summarise(N = n(), Percent = n()/NROW(x)*100) %>%
mutate(C.Percent = cumsum(Percent))
return(Table)
}
freqTable(data, "factors")
库(tidyverse)
对不起,我刚刚想好了
分组人(字段)
我认为这可能与非标准评估有关,但我还不太了解它
这:
frektable%
+总结(N=N(),百分比=N()/NROW(x)*100)%>%
+突变(C.Percent=累积(百分比))
+返回(表)
+ }
现在给出:
> freqTable(data, "factors")
# A tibble: 2 × 4
factors N Percent C.Percent
<int> <int> <dbl> <dbl>
1 2 2 40 40
2 3 3 60 100
频率表(数据,“系数”)
#一个tibble:2×4
系数N%C.百分比
1 2 2 40 40
2 3 3 60 100
查看“使用dplyr vignette编程”:您是如何发现它可以与粘贴一起使用的?使用as.character
时,我从错误消息中怀疑它正在将变量名计算为值,并认为如果使用“粘贴”,它可能会将值输出到我需要的空间中。这是一个很酷的技巧,我想知道它是否适用于其他函数,如aggregate,也使用静态名称作为输入。我正在准备一个答案,在那之前,在那之后,我重新命名了这个专栏。。。如果有人能解释发生了什么我会很高兴的!实际上,它似乎都来自于你从一个组到另一个组,这里不需要粘贴,从我对非标准评估所做的少量阅读来看,大多数函数似乎都有一个非标准(NSE)和标准评估(SE)版本。正常(不带下划线)函数名为NSE版本,下划线版本为标准评估版本。据我所知,NSE采用变量名,而SE版本采用值。
# A tibble: 1 × 4
`paste(field)` N Percent C.Percent
<chr> <int> <dbl> <dbl>
1 factors 5 100 100
freqTable <- function(x, field){
+ Table <- x %>%
+ group_by_(paste(field)) %>%
+ summarise(N = n(), Percent = n()/NROW(x)*100) %>%
+ mutate(C.Percent = cumsum(Percent))
+ return(Table)
+ }
> freqTable(data, "factors")
# A tibble: 2 × 4
factors N Percent C.Percent
<int> <int> <dbl> <dbl>
1 2 2 40 40
2 3 3 60 100