【发布时间】: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(.))?