将数据帧中的值替换为行方式阈值R以下

时间:2017-03-13 12:59:20

标签: r

我有一个数据帧(强度),其中我想用0替换行方式阈值以下的所有值。阈值是相应行的最大值的80%。结果应作为新数据框进行保护

我试过了:

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

filter_int <- t(apply(X= intensities, MARGIN = 1, FUN= cutoff))
运行此命令,filter_int是一行,全部为零。有任何想法吗?

1 个答案:

答案 0 :(得分:0)

经典问题。 R函数返回最后一行返回的值。如果您指定了某些内容,R将无形地返回您指定的值。在您的情况下,这是0

添加一个显式的return语句来解决这个问题:

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,])
}