【问题标题】:Calculating standard deviation for each row on selected columns计算选定列上每一行的标准偏差
【发布时间】:2018-03-14 18:32:26
【问题描述】:

我不习惯 R,所以为了练习,我正在尝试做我以前在 R 上的 SPSS 上做的所有事情。

在我的数据集中,每一行都是一个案例。这些列是调查问题(每个问题 1 个)。

假设我有“A1”到“A6”、“B1”到“B6”等列

我刚刚计算完 A1 到 A6 上每个人的平均值

data$meandata <- rowMeans(subset(data, select=c(A1:A6), na.rm=TRUE))

如何计算meandata 的标准差?

【问题讨论】:

  • sd()够了吗?
  • 寻求帮助时,您应该包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出。
  • apply(subset(data, select = A1:A6), 1, sd, na.rm=TRUE) .
  • 你的rowMeans调用错误,括号必须关闭subset,而不是na.rm之后。
  • @MrFlick 谢谢。作为一个还在学习 R 的人,我花了 30 分钟才打出这个简单的问题,这对于社区来说显然是不够的。

标签: r


【解决方案1】:

嘿,最简单的方法是使用 apply() 函数。

假设您有 25 行数据和 6 列标记为 A1 到 A6。

data <- data.frame(A1=rnorm(25,50,4),A2=rnorm(25,50,4),A3=rnorm(25,50,4),
A4=rnorm(25,50,4),A5=rnorm(25,50,4),A6=rnorm(25,50,4))

您可以使用 apply 函数通过下面的代码找到每行第 1 到第 6 列的标准差。第一个参数是您的数据对象。第二个参数是一个整数,指定 1 表示行或 2 表示列(这是函数将应用于数据框的方向)。最后一个参数是您希望应用于数据框的函数(例如本例中的均值或标准差 (sd)。请参见下面的代码。

apply(data[,1:6],1,sd)

索引可用于限制传递给应用函数的数据的行数或列数。这是通过在数据对象后面的括号内为您感兴趣的行或列输入一个数字向量来完成的。

data[c(row.vector),c(column.vector)]

假设你只想知道前 3 列的 sd。

apply(data[,1:3],1,sd)

现在让我们看看第 4 到 6 列和第 1 到 10 行的 sd

apply(data[1:10,4:6],1,sd)

为了更好的衡量,让我们找到每列的 sd

apply(data,2,sd)

请注意,sd 接近 4,这是我在为 A1 到 A6 列生成伪随机数据时指定的值。

希望对你有帮助

【讨论】:

  • 您是否假设col1col6 是数字索引?因为您不能使用带有“标准”子集的冒号的列名。
  • @user9367157 我对此投了反对票,因为它不是有效的 R 代码。如果您给出一个可重复且独立的示例,我将删除我的反对意见。在这种简单的情况下,您可以轻松生成一些示例数据。
  • @Mauritis Evers 很抱歉,我希望这能让一切更清楚。
  • @user9367157 +1
猜你喜欢
  • 2021-11-30
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多