【问题标题】:Replace values in dataframe below a row wise threshold R [duplicate]替换数据框中的值低于逐行阈值 R [重复]
【发布时间】:2017-03-13 12:59:19
【问题描述】:

我有一个数据框(强度),我想将低于行阈值的所有值替换为 0。阈值是相应行最大值的 80%。结果应该作为一个新的数据框被保护起来

我试过了:

cutoff <- function(x){
 x[x < 0.8* max(x)] <- 0
} 

filter_int <- t(apply(X= intensities, MARGIN = 1, FUN= cutoff))

运行它,filter_int 是全零的一行。有任何想法吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    经典问题。 R 函数返回最后一行返回的值。如果你分配了一些东西,R 会无形地返回你分配的值。在你的情况下,这就是0

    添加显式返回语句来解决这个问题:

    cutoff <- function(x){
     x[x < 0.8* max(x)] <- 0
     return(x)
    } 
    

    如果您使用apply,请记住,在这种情况下,它将为每个变量返回一个包含一行的矩阵。因此,您必须对其进行转置,然后使用data.frame() 返回数据框。由于与几年前相比,for 循环进行了很多优化,这实际上更快:

    df <- as.data.frame(
      replicate(10, sample(1:100,100))
    )
    
    df2 <- df
    for(i in seq_len(nrow(df))){
      df2[i,] <- cutoff(df[i,])
    }
    

    【讨论】:

    • 谢谢,现在可以了
    猜你喜欢
    • 2013-12-21
    • 2020-11-21
    • 1970-01-01
    • 2023-04-04
    • 2018-05-04
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 2019-01-02
    相关资源
    最近更新 更多