如果一列中的负值在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)