R中系数的连续值和新级别

R中系数的连续值和新级别,r,r-factor,R,R Factor,我有以下样品 id <- c("a","b","a","b","a","a","a","a","b","b","c") SOG <- c(4,4,0,0,0,0,0,0,0,0,9) data <- data.frame(id,SOG) 但是我想换一个 [1] 0 0 1 2 3 3 3 3 4 4 0 我的意思是,当因子“id”的级别与前一行不同时,我想跳到下一个“stop”(I+1)。看看dplyr包 library(dplyr) data %>% muta

我有以下样品

id <- c("a","b","a","b","a","a","a","a","b","b","c")
SOG <- c(4,4,0,0,0,0,0,0,0,0,9)
data <- data.frame(id,SOG)
但是我想换一个

[1] 0 0 1 2 3 3 3 3 4 4 0 

我的意思是,当因子“id”的级别与前一行不同时,我想跳到下一个“stop”(I+1)。

看看
dplyr

library(dplyr)
data %>%
  mutate(
    Stops = ifelse(
      SOG > 0,
      0,
      cumsum(SOG == 0 & lag(id) != id)
    )
  )

请查看
dplyr
软件包

library(dplyr)
data %>%
  mutate(
    Stops = ifelse(
      SOG > 0,
      0,
      cumsum(SOG == 0 & lag(id) != id)
    )
  )
我们可以试试

library(data.table)
setDT(data1)[, v1 := if(all(!SOG)) c(TRUE, id[-1]!= id[-.N]) else
     rep(FALSE, .N), .(grp = rleid(SOG))][,cumsum(v1)*(!SOG)]
#[1] 0 0 1 2 3 3 3 3 4 4 0 0 0 0 5 5 0 6 6 0
使用旧数据

setDT(data)[, v1 := if(all(!SOG)) c(TRUE, id[-1]!= id[-.N]) 
       else rep(FALSE, .N), .(grp = rleid(SOG))][,cumsum(v1)*(!SOG)]
#[1] 0 0 1 2 3 3 3 3 4 4 0
数据
id我们可以试试

library(data.table)
setDT(data1)[, v1 := if(all(!SOG)) c(TRUE, id[-1]!= id[-.N]) else
     rep(FALSE, .N), .(grp = rleid(SOG))][,cumsum(v1)*(!SOG)]
#[1] 0 0 1 2 3 3 3 3 4 4 0 0 0 0 5 5 0 6 6 0
使用旧数据

setDT(data)[, v1 := if(all(!SOG)) c(TRUE, id[-1]!= id[-.N]) 
       else rep(FALSE, .N), .(grp = rleid(SOG))][,cumsum(v1)*(!SOG)]
#[1] 0 0 1 2 3 3 3 3 4 4 0
数据
id答案可以使用
dplyr
但不依赖于它:
data$Stops 0,0,cumsum(SOG==0&lag(id)!=id))
完全可读,不需要为SO引入另一个包。(
lag()。当我用
id编辑我的样本时,答案可能会使用
dplyr
,但它并不依赖于它:
data$Stops 0,0,cumsum(SOG==0&lag(id)!=id))
完全可读,不需要为SO引入另一个包。(
lag()。当我用
id编辑我的样本时,这里有一个变量
带有(数据,(!SOG)*(cumsum(!SOG&c(FALSE,id[-1]!=id[-length(id)]))
@akrun,谢谢。当我用
id编辑我的样本时,非常感谢@Akrun。我目前正在制作一个更大的样本,明天将继续;)这是一个带有(数据,(!SOG)*(cumsum(!SOG&c(FALSE,id[-1]!=id[-length(id)]))的变体
@akrun,谢谢。当我用
id编辑我的样本时,非常感谢@Akrun。我目前正在制作一个更大的样本,明天将继续;)成功了。我现在有一个新的问题,但它应该是好的,谢谢@弗洛尼很高兴知道它是有效的。如果你有一个新问题,请做一个新的问题后。它的工作。我现在有一个新的问题,但它应该是好的,谢谢@弗洛尼很高兴知道它是有效的。如果你有新问题,请以新问题的形式发布。
id <- c("a","b","a","b","a","a","a","a","b","b","c","a","a","a","a","a","a","a","a", "a")
SOG <- c(4,4,0,0,0,0,0,0,0,0,9,1,5,3,0,0,4,0,0,1)
data1 <- data.frame(id, SOG, stringsAsFactors=FALSE)