如何将自定义函数应用于数据框的每一列

标记

我试图摆脱tidyverse和dplyr方法的困扰,并希望将以下函数应用于数据框/数据表的每一列:

library(multimode)
funx <- function(x) {multimode::modetest(x, method = 'SI') }

然后尝试使用诸如summary_all之类的内容开始,但是我立即收到错误消息:

错误:列的mpg长度必须为1(汇总值),而不是8

library(dplyr)

mtcars %>%
     summarise_all(funx)

我希望最终得到一个新的数据框,该数据框显示在第1列中测试的colname和在第modetest2列中的p值

从昨天(23-05-2019)更新软件包后,我的解决方案无法正常工作,下面的代码现在显示为'。' 点而不是列名提交了一个帖子到github页面来询问这种改变的原因:github

library(multimode)
funx <- function(x) {
    print(substitute(x))
    multires <- multimode::modetest(x, method = 'SI') 
    p <- multires$p.value}

mtcars %>% 
    select(1:2) %>%
    summarise_all(list(~ funx(.)))

具有讽刺意味的更新,在获得有关github帖子的反馈后,使用新版本,我们现在可以执行以下操作:

   mtcars %>%
      select(1:2) %>%
        summarise_all(funx)

如您所见,它与我发布问题时开始的语法完全相同。因此,我想说dplyr团队所做的出色工作使语法更加“自然”。

阿克伦

所述summarise可输出仅与单个元件。根据?summarise

创建一个或多个标量变量,以汇总现有tbl的变量。具有由group_by()创建的组的Tbl将在每个组的输出中导致一行。没有组的Tbl将导致一行。

因此,如果输出大于长度1,则将其包装在listunnest

library(dplyr)    
out <- mtcars %>%
          summarise_all(list(~ list(funx(.))))

如果我们要提取单个值,例如p.value,则无需将其包装在list

out1 <- mtcars %>% 
          select(1:2) %>%
          summarise_all(list(~ funx(.)$p.value))
out1
#    mpg   cyl
#1 0.718 0.244

可以将其转换为两列数据集 gather

library(tidyr)
gather(out1, colName, pvalue) %>%
      arrange(pvalue)

通过检查modetest单列上的输出

funx(mtcars[[1]])

#   Silverman (1981) critical bandwidth test

#data:  x
#Critical bandwidth = 2.5413, p-value = 0.716
#alternative hypothesis: true number of modes is greater than 1

它不是单个值输出,而是摘要模型输出。因此,最好将其存储在中list,但是,我们可以提取特定的组件(p-value)并将其输出到summarise

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将自定义功能应用于每一行的熊猫数据框

将自定义函数应用于R中数据帧中每一行的两列

将自定义函数应用于Spark数据框组

将自定义函数应用于PySpark中数据框的选定列的单元格

将自定义函数应用于熊猫数据框

如何将自定义函数应用于并行配对数组的明智元素?

如何将自定义百分比变化应用于熊猫数据框?

熊猫将自定义功能应用于由另一列分组的一列的每一行

将自定义函数应用于熊猫数据框中的每个列组合

使用purrr将自定义函数重复应用于相同的数据框

如何将自定义函数应用于熊猫数据框的2列?

将自定义函数应用于数据框

将自定义函数应用于r中的每一行

如何将自定义比较器应用于R数据帧?

将自定义函数一次应用于分组的数据帧n行

将自定义函数应用于数据框的每个子集并生成一个数据框

如何将自定义函数应用于 quanteda 语料库

如何将自定义重试策略应用于 Azure 函数中的 Eventhub 绑定

R按一列分组并将自定义函数应用于另一列

将自定义函数应用于数据框

如何将自定义函数应用于 dask 数据框中的组,使用多列作为函数输入

如何将函数应用于熊猫数据框中一列的每一行?

将自定义函数应用于pandas中的一列列表,如何处理异常?

如何将一段 R 代码应用于数据框的每一列

如何将自定义函数正确应用于数据框字典?

将自定义函数应用于数据框中的列对

将自定义函数应用于数据框列

如果列值不等于 nan,则将自定义函数应用于数据框中的列

如何将 lme 函数应用于数据框的每一列?