好吧,我有一系列数字。我期待排除小于-0.10的值。但是,如果在-0.10之后出现一个超过-0.10的数字,它将被忽略。R - 从系列中排除数字
我至今试图通过rleid
使用dplyr
为任务分组,然后试图想出一个办法在我的第一个系列的数字使用row_number()
所以,我可以选中以下first
值的位置 - 0.10。一旦我知道row_number,任何其他值after
第一个实例可以被忽略并从输出中排除。
我使用这个伪数据:
x <- c(0,0,-0.07347,-0.08351,-0.09091,-0.10624,-0.08087,-0.10677,-0.14588,-0.13901,-0.13689,0,0,0,-0.09091,0.10624,0.08087,0.10677,0,0)
y <- c(0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0)
df <- data.frame (x,y)
# Remove leading 1 on x column
df$z <- ifelse(df$x <0 | df$x >0, 1,0)
# Exclude values (all less than -0.1)
df$output <- ifelse(df$z == 1 & df$x > -0.1 ,1,0)
期望的输出是当df$z == 1
和对<-0.10
... print 0
的第一个实例,直到系列的结尾(不管下面的数字的值的)
此图显示此正确输出为绿色。
*编辑
解决方案: 处理多个运行超过-0.010
df %>%
group_by(rleid=rleid(z)) %>%
mutate(outcome=as.numeric(!row_number() > row_number(z==1 & x < -0.1))) %>%
mutate(outcome=replace(outcome,z == 1 & x < -0.1, 0)) %>%
mutate(outcome=replace(outcome,z == 0, 0)) %>%
ungroup() %>% select(-rleid) %>% data.frame()
如果重新发布的照片中,我们可以在编辑就为将来的用户 –
我认为这个问题是你的'artprice'是一个字符。它应该工作,如果你这样做:'newdf $ artprice < - as.numeric(gsub(“\\ $”,“”,newdf $ artprice))'并重新运行。 –
好吧,因为我喜欢学习...为什么我们包括\\ $“,”“?这是为了排除任何这些缺失的行,值等? –