使用lappy dplyr计算数据帧中每列的模式
我试图创建一个函数,它从本质上为我获取MODE…或MODE-X(第二个最常见的值&以及数据帧中每列的相关计数) 我不知道我可能遗漏了什么,我正在寻求帮助?我相信这与将变量传入dplyr函数有关使用lappy dplyr计算数据帧中每列的模式,r,function,dplyr,lapply,R,Function,Dplyr,Lapply,我试图创建一个函数,它从本质上为我获取MODE…或MODE-X(第二个最常见的值&以及数据帧中每列的相关计数) 我不知道我可能遗漏了什么,我正在寻求帮助?我相信这与将变量传入dplyr函数有关 library(tidyverse) myfunct_get_mode = function(x, rank=1){ mytable = dplyr::count(rlang::sym(x), sort = TRUE) names(mytable)= c('variable','counts
library(tidyverse)
myfunct_get_mode = function(x, rank=1){
mytable = dplyr::count(rlang::sym(x), sort = TRUE)
names(mytable)= c('variable','counts')
# return just the rank specified...such as mode or mode -1, etc
result = table %>% dplyr::slice(rlang::sym(rank))
return(result)
}
mtcars %>% lapply(. %>% (function(x) myfunct_get_mode(x, rank=2)))
如果我们在
列表
中需要它,我们可以使用映射
f1 <- function(dat, rank = 1) {
purrr::imap(dat, ~
dat %>%
count(!! rlang::sym(.y)) %>%
rename_all(~ c('variable', 'counts')) %>%
arrange(desc(counts)) %>%
slice(seq_len(rank))) #%>%
#bind_cols - convert to a data.frame
}
f1(mtcars, 2)
f1%
计数(!!rlang::sym(.y))%>%
重命名所有(~c('variable','counts'))%>%
排列(描述(计数))%>%
切片(序号(秩))#%>%
#bind_cols-转换为data.frame
}
f1(mtcars,2)
您的函数存在一些问题:
mtcars%%>%lapply(.%>%(函数(x)打印(x))
检查您的x
实际上是mtcars
的整列。要获取列的名称,请将函数应用于名称(mtcars)
。但是,您还必须指定正在处理的数据帧李>
在rlang::sym(x)
前面李>
rank
不是变量名,因此这里不需要rlang::sym
李>
table
应该是函数的倒数第二行中的mytable
李>
那么它是如何工作的(尽管可能有更好的方法):
您的函数在这里抛出一个错误:“只有字符串可以转换为符号”,您需要
代码>以进行评估
myfunct_get_mode = function(df, x, rank=1){
mytable = count(df, !!rlang::sym(x), sort = TRUE)
names(mytable)= c('variable','counts')
# return just the rank specified...such as mode or mode -1, etc
result = mytable %>% slice(rank)
return(result)
}
names(mtcars) %>% lapply(function(x) myfunct_get_mode(mtcars, x, rank=2))