【问题标题】:Calculate standard deviation of certain columns in data frame计算数据框中某些列的标准差
【发布时间】:2015-04-29 06:04:45
【问题描述】:

我有一个包含 120 行和 265 列的数据框。第 5 列到第 265 列的单元格包含一个数值。

对于每一行,我想计算从第 5 列到第 265 列(第 5 列、第 7 列、第 9 列等)的每个奇数列的值的标准偏差,并将其写入相应的第 266 列行。

我现在用 apply 函数和 for 循环研究了两个小时,但我得到的只是我无法理解的错误消息。

【问题讨论】:

    标签: r dataframe statistics


    【解决方案1】:

    你可以试试

    df$newCol <- apply(df[seq(5, ncol(df), by=2)], 1, sd)
    

    或者从matrixStats使用rowSds

    library(matrixStats)
    df$newCol <-  rowSds(as.matrix(df[seq(5, ncol(df), by=2)]))
    

    或者正如@DavidArenburg 所评论的,您可以查看矢量化的RowSD

    数据

    set.seed(253)
    df <- cbind(as.data.frame(matrix(sample(letters, 120*4, replace=TRUE),
      ncol=4), stringsAsFactors=FALSE), matrix(sample(1:50, 120*261, 
     replace=TRUE), ncol=261))
    

    【讨论】:

    • 你也可以试试我很棒的(矢量化)RowSD :)
    • @DavidArenburg 感谢分享。近期有没有制作包的计划?
    • 我可能会使用Rcpp 包编写它们。目前,这些功能只是更高效一点......
    • 感谢 akrun 的回答,但它也不起作用。与我的尝试一样,我收到有关某些“50 个警告...”的相同错误消息。我不明白这里可能出了什么问题,因为我已经在这个数据框上执行了六次其他操作,其中一些具有应用功能和你提到的不同元素,它们都像魅力一样工作。我想我会将数据复制并粘贴到 spss 或 excel 中并在那里进行操作。感谢您的宝贵时间。
    • @MichaelHeinisch 请检查5:ncol(yourdata) 中的一列是否不是数字,即str(yourdata)
    猜你喜欢
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 2023-01-13
    相关资源
    最近更新 更多