【问题标题】:How to choose a range of columns in R如何在R中选择一系列列
【发布时间】:2019-07-27 11:58:07
【问题描述】:

我有一些数据,只想计算meansdvar等等。我的问题不是功能而是列,我似乎不知道如何选择它们。

所以第一列包括动物的名称和第 2 到 11 列我的数字数据。 列名是 X1X10。 我的数据中有很多NA

我可以很容易地为每一行计算它,但是当我将它们组合起来时,我总是得到 ​​p>

参数不是数字或逻辑:返回 NA

例如,对于平均值和我尝试的一列(+ 它有效)

mean(WLD1$X1, na.rm=TRUE)

对于第 2 到 11 列,我尝试过:

mean(WLD1[,c(2:11)], na.rm=TRUE)

也试过了:

lapply(WLD1[,2:11], mean, na.rm=TRUE)

还尝试了X1:X10
我想这很简单,但我只是坚持下去。非常感谢您的帮助。

【问题讨论】:

  • colMeans(WLD1[2:11], na.rm=TRUE)。其他统计,apply(WLD1[2:11], 2, var)sd

标签: r median


【解决方案1】:

您可能想使用应用功能。 apply 函数的作用是获取一个函数(需要计算),并针对 DataFrame 或矩阵逐列或逐行应用于每个元素。逐行和逐列设置由 MARGIN= 参数编码,您想要执行的实际计算由 FUN= 编码(显然代表函数)。因此,如果您想在预期的函数/计算中一次输入一行,那么您将选择 MARGIN=1 否则您将选择 MARGIN=2 (这意味着一次将一列输入函数)。 由于在您的情况下,您想要计算列号 2 到 11 的均值、sd 和 var,因此您将分三步完成,您是对的,我们将为所有三个语句设置 MARGIN=2,但 FUN= 将不断变化。下面是代码。

Mean_of_2_to_11_Column <- apply(WLD1[,2:11], MARGIN=2, FUN=mean)
SD_of_2_to_11_Column <- apply(WLD1[,2:11], MARGIN=2, FUN=sd)
Var_of_2_to_11_Column <- apply(WLD1[,2:11], MARGIN=2, FUN=var)

如果我在这里说的任何事情对您来说不清楚,请告诉我。万事如意

【讨论】:

    【解决方案2】:

    您可以使用purrr 包。

    library(purrr)
    mydatabase %>% map_if(is.numeric, function(x) mean(x, na.rm = TRUE))
    

    这将计算数据库中所有数字列的平均值,同时忽略 NA 值。

    【讨论】:

    • 对于 sd、var 等,只需将“mean”更改为所需的度量即可。
    猜你喜欢
    • 2022-10-14
    • 2019-01-15
    • 2020-04-11
    • 2022-10-04
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 2023-03-22
    • 2016-12-17
    相关资源
    最近更新 更多