示例数据:
我想计算每个唯一列名称的平均值和标准偏差(忽略NA)以获得如下输出:
可再现数据:
df <- data.frame(c(1, 3.7, 1.5, 3.7, 2.9, 7),
c(2, 1, 0.4, NA, 1.1, 4.9),
c(1.1, 1, 2.1, 3.6, 10, 6.9),
c(4, 3.3, 3.3, 3.1, 7.1, 5.4),
c(9.8, NA, 6, 5.6, 7.7, 4.9))
names(df) <- c("sun", "sun", "sun", "sky", "sky")
我得到的最接近的是
#for mean
sapply(split.default(df, names(df)), rowMeans, na.rm = TRUE)
#for sd
sapply(split.default(df, names(df)), function(x) apply(x, 1, sd, na.rm=TRUE))
这是我从这篇文章中得到的,但我不知道如何调整它来得到我想要的。我知道我可以取rowmeans的平均值来得到每组的平均值,但这不适用于标准差。
这里是<code>dplyr<code>中的另一种方法,将类似命名列的值放入一列中,然后对它们计算<code>mean<code>和<code>sd<code>。
library(dplyr)
library(tidyr)
df %>%
pivot_longer(cols = everything(),
names_to = '.value') %>%
summarise(across(.fns = list(mean = ~mean(., na.rm = TRUE),
sd = ~sd(., na.rm = TRUE))))
# sun_mean sun_sd sky_mean sky_sd
# <dbl> <dbl> <dbl> <dbl>
#1 3.17 2.68 5.47 2.10
如果您希望均值
和标准差
值在单独的列中,您可以添加到上述答案中-
%>% pivot_longer(cols = everything(), names_to = c('col', '.value'), names_sep = '_')
# col mean sd
# <chr> <dbl> <dbl>
#1 sun 3.17 2.68
#2 sky 5.47 2.10
这里有一个< code>tidyverse解决方案
library(tidyverse)
df <- data.frame(c(1, 3.7, 1.5, 3.7, 2.9, 7),
c(2, 1, 0.4, NA, 1.1, 4.9),
c(1.1, 1, 2.1, 3.6, 10, 6.9),
c(4, 3.3, 3.3, 3.1, 7.1, 5.4),
c(9.8, NA, 6, 5.6, 7.7, 4.9))
names(df) <- c("sun", "sun", "sun", "sky", "sky")
df %>%
#Pivotting data
pivot_longer(cols = everything()) %>%
#Grouping by sun/sky
group_by(name) %>%
#Caluclating mean and sg grouped by sun/sky
summarise(
mean = mean(value,na.rm = T),
sd = sd(value,na.rm = T)
)
name mean sd
<chr> <dbl> <dbl>
1 sky 5.47 2.10
2 sun 3.17 2.68
我们可以使用
t(sapply(split.default(df, names(df)), function(x) {
x1 <- unlist(x)
data.frame(mean = mean(x1, na.rm = TRUE), sd = sd(x1, na.rm = TRUE))}))
-输出
mean sd
sky 5.472727 2.102423
sun 3.170588 2.677631
或者使用< code>data.table
library(data.table)
melt(setDT(df), measure = patterns("^sun", "^sky"),
value.name = c("sun", "sky"))[, c(list(categ = c("mean", "sd")),
lapply(.SD, function(x) c(mean = mean(x, na.rm = TRUE),
sd = sd(x, na.rm = TRUE)))), .SDcols = sun:sky]
categ sun sky
1: mean 3.170588 5.472727
2: sd 2.677631 2.102423
我有一个由66个变量的10299个观测值组成的数据框。其中一些变量共享一个通用的列名,我想计算每个观测值的这些变量的平均值。 具有以下矩阵,列名: 我想得到: 我尝试了循环,命令,但没有得到所需的结果。 抱歉,如果这个问题看起来太基本了,我已经在谷歌上查过可能的解决方案,但没有找到任何解决方案。
我有一个大的数据帧,显示如下: 基本上,每当写完“状态”时,我都想根据“类型”计算平均值和中位数。到目前为止,我所做的是首先根据状态“完成”创建一个组,然后计算组的平均值和中位数,如下所示: 如何为“类型”添加一个参数,以便脚本也将根据“类型”估计每个组的中位数。 谢谢。
问题内容: 我正在尝试使用下面的代码来计算用户输入的一组值的平均值,并将其显示在中,但它无法正常工作。假设用户输入7、4和5,该程序在应显示5.3时显示平均值。 代码有什么问题? 问题答案: 当您拥有增强的for循环时,为什么还要对索引使用笨拙的for循环?
我使用Spark sql dataframes执行groupby操作,然后计算每组数据的平均值和中值。原始数据量约为1 TB。 当我运行该查询时,我的工作被卡住,无法完成。如何调试该问题?是否存在导致groupby()卡滞的按键不平衡?
我在添加数组的所有元素以及求取它们的平均值时遇到了问题。我将如何做到这一点并用我当前拥有的代码实现它?这些元素应该定义如下。
我想用excel计算三个月内三名员工的销售标准差和平均值。是否有一个公式可以根据所选员工姓名给出该公式?我希望它是一个可重复和可扩展的公式,适用于100名员工。另外,我不想在这里使用pivot功能,因为我想在pivot字段中使用std-dev和average。输入输入 输出