如果数值在R中连续出现x次,则将负值替换为NA

  • 本文关键字:替换 NA 连续 如果 r
  • 更新时间 :
  • 英文 :


如果一列中的负值在R中连续出现144次以上(也称为一行(,我想用NA值替换它们

df$a_neg <- df$a < 0

这给了我一个新的列,如果值为负数,则显示TRUE,如果值是正数,则显示FALSE。

我试着通过以下操作将其转换为一个新的数据帧:

df_neg <- df %>%
subset() %>%
group_by(a_neg) %>%
filter(n() > 144)

所做的就是把我刚开始使用的确切的帧数据帧还给我。任何帮助都将不胜感激!

你可以试试这个:

# Create data
set.seed(123)
df = data.frame(a=rnorm(2000,-2.5))
# Find contiguous blocks of positive and negative values
df$block = cumsum(c(1,abs(diff(df$a<0))))
# Count how many negative values are in each block
df$block_neg = ave(df$a,df$block,FUN = function(x) {sum(x<0)})
# Assign NA to blocks with greater than 144 negative values
df$a1 = ifelse(df$block_neg>144,NA,df$a)

最新更新