使用lapply dplyr计算数据帧中每一列的模式

时间:2018-08-30 15:12:08

标签: r function dplyr lapply

我正在尝试创建一个函数,该函数从本质上为我提供MODE ...或MODE-X(第二至第X个最常用值&以及数据帧中每一列的关联计数。

我不知道自己可能会缺少什么,正在寻找帮助吗?我相信这与将变量传入dplyr函数有关。

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)))

2 个答案:

答案 0 :(得分:1)

您的功能存在一些问题:

  1. 您的函数调用没有按照您的想法进行。与mtcars %>% lapply(. %>% (function(x) print(x)))一起检查,您的x实际上是mtcars的整个列。要获取列名,请将函数应用于names(mtcars)。但是随后,您还必须指定要处理的数据框。
  2. 要评估符号,您需要从sym前面使用!!来获得rlang::sym(x)
  3. rank不是变量名,因此这里不需要rlang::sym
  4. 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))

答案 1 :(得分:0)

如果我们需要在Context initContext = new InitialContext(); Context envContext = (Context)initContext.lookup("java:/comp/env"); dataSource = (DataSource)envContext.lookup("jdbc/ParkingBookSystem"); 中使用它,可以使用list

map