【问题标题】:Rowwise mean on selected columns in RR中选定列的逐行平均值
【发布时间】:2018-03-14 23:51:03
【问题描述】:

让我们在著名的iris 数据集上说明问题。我需要按行应用选定的函数,但只能在选定的列上应用。示例如下:

library(tidyverse)

iris %>%
  mutate_at(.funs = scale, .vars = vars(-c(Species))) %>%
  rowwise() %>% 
  mutate(my_mean=mean(c(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width)))

所以,首先我缩放所有变量,不包括Species,然后计算所有四个数值变量的逐行平均值。但是,在实际数据集中,我有 100 多个数字变量,我想知道如何说服 R 自动包含除选定变量之外的所有变量(例如,给定示例中的 Species)。我浏览了 SO 上的解决方案(例如,this),但所有示例都明确引用了列名。非常欢迎任何指针。

编辑:经过一番修改后,这是我的解决方案:

iris %>%
  as_tibble() %>% 
  mutate_at(.funs = scale, .vars = vars(-c(Species))) %>% 
  transmute(Species, row_mean = rowMeans(select(., -Species)))

【问题讨论】:

  • 如果我理解你的问题,在基础 R 中,你会做rowMeans(scale(iris[-grep("Species", names(iris))]))
  • 您想将rowMeans() 应用于所有列除了一个吗?例如,dplyr::select(-Species) %>% dplyr::mutate(my_mean=rowMeans(.))?

标签: r dplyr tidyverse


【解决方案1】:

我不确定我到底是什么问题,但这里有一些替代的 dplyr 解决方案,可以为您提供除所选列之外的所有列的平均值:

iris %>%
    select(-Species) %>%
    mutate(Means = rowMeans(.))

iris %>%
    mutate(Means = rowMeans(.[,1:4]))

iris %>%
    mutate(Means = rowMeans(.[,-5]))

第一个是唯一从返回中消除所选列的列。希望其中一个对您有所帮助。

【讨论】:

  • 如何使用纯 dplyr 实现相同的效果?我正在寻找一个没有[] 来获取列并明确使用rowwise 的解决方案。谢谢
  • 嘿@beginneR。您可以尝试第一个示例在计算平均值之前删除列,然后您不需要指定。您可以像这样按行使用:iris %>% select(-Species) %>% rowwise() %>% mutate(Means = mean(c(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width))),但我相信您必须指定要表示的列。
猜你喜欢
  • 1970-01-01
  • 2015-10-19
  • 2021-07-08
  • 2014-10-08
  • 1970-01-01
  • 2016-10-13
  • 2021-02-08
  • 1970-01-01
  • 2021-12-05
相关资源
最近更新 更多