【问题标题】:Store a series of vectors in "for loop"在“for循环”中存储一系列向量
【发布时间】:2013-06-08 23:30:48
【问题描述】:

我在 R 的“for循环”中保存一系列向量(矩阵列)时遇到问题。实际上,我想计算矩阵中某些向量(行)的平均值。我运行“for循环”来找出我想为这些向量(列)的行找到平均值的向量(列)。我曾尝试使用“应用”功能,但我得到的是最后一个向量(列),因为我不知道如何在某处运行“for 循环”时保存这些先前的向量(列)。有人可以启发我吗?谢谢。 `

column.name<-colnames(loadfile)
       for(i in 1:length(column.name)){
        char<- column.name[i]
        tmp<-agrep("HW", char, ignore.case = TRUE, max.distance = 0.1 )
        if(length(tmp) > 0){ 
        print(column.name[i])
        x<-i
        print(x)
    }
        loadfile$newcol<-apply(loadfile[x],1,mean)
    }

在上面的代码中,loadfile 是 data.frame,我创建了一个新列来保存 HW 列中每一行的平均值。我不介意显示我的代码。

【问题讨论】:

    标签: r


    【解决方案1】:

    如果没有可重复的示例,很难为您提供帮助。在这里,我猜你想做什么。它是矢量化版本,因为 agreprowMeans 是矢量化的。

    tmp <- agrep("HW", column.name, ignore.case = TRUE, 
                 max.distance = 0.1 )
    loadfile$newcol <- rowMeans(loadfile[,tmp])
    

    编辑我添加了一个可重现的示例,它适用于矩阵和 data.frame:

    mm <- matrix(1:25,ncol=5)
    colnames(mm)  <- c(paste0('HW',1:3),paste0('NO',1:2))
    loadfile <- as.data.frame(mm)
    column.name <- colnames(loadfile)
    tmp <- agrep("HW", column.name, ignore.case = TRUE, 
                 max.distance = 0.1 )
    loadfile$newcol <- rowMeans(loadfile[,tmp])
    

    【讨论】:

    • +1 我也有同样的想法,但我忘记了 agrep 是矢量化的。
    • 先生...loadfile 不是一个真正的矩阵。抱歉,我确实提到了矩阵,但它是 data.frame。所以它不起作用
    • @user2462924 rowMeans( as.matrix( loadfile[,tmp] ) )
    • 你们真是天才。感谢您提供非常好的示例和建议。但就我而言,我仍然有问题。我没有得到数字,而是所有的 NaN 和 NA。我不知道为什么。无论如何,我喜欢这个社区。​​span>
    • 对不起...我的错。我得到了它。谢谢大家。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2020-01-04
    • 1970-01-01
    相关资源
    最近更新 更多