根据零组添加ID

use*_*568 2 r

我的数据集很大,在测试会话的设定期间(期间)内对个人(姓名)包含许多观察(从属变量= DV).我的数据集的一个小例子如下:

ExampleData <- data.frame(Name = c("Tom","Tom","Tom","Tom","Tom","Tom","Tom","Tom", "Tom", "Tom", 
                                   "Ben","Ben","Ben","Ben","Ben","Ben","Ben","Ben", "Ben", "Ben"),
                          Period = c(0,0,1,1,1,0,0,0,1,1, 
                                      0,0,0,1,1,1,0,0,1,1),
                          DV = runif(20, 1.5, 2.8))
Run Code Online (Sandbox Code Playgroud)

ExampleData$Period==1个人进行运动测试时,其时间/长度会有所不同.每次测试之间的间隔都表示为ExampleData$Period==0.为了避免在一个人正在进行测试并添加连续时段时手动输入,我希望包含一个列,该列声明何时由一组0组成的1组是一个新的时段 - 跨越每个人的数据.我该怎么做呢?

我的预期输出是:

ExampleData$Descriptor <- c(NA,NA,"Period One", "Period One","Period One",NA,NA,NA,"Period Two","Period Two",
                        NA,NA,NA,"Period One","Period One","Period One",NA,NA,"Period Two","Period Two")
Run Code Online (Sandbox Code Playgroud)

我的问题是相似的另一矿井,位于这里,虽然我现在已经为每个单独的多个条目.我尝试过dplyr语法:

Test_df <- ExampleData %>%
  mutate(
    Descriptor = case_when(
      Period > 0 ~ "Period",
      Period == 0 ~ "Rest"),
    rleid = cumsum(Descriptor != lag(Descriptor, 1, default = "NA")), 
    Descriptor = case_when(
      Descriptor == "Period" ~ paste0(Descriptor, rleid %/% 2),
      TRUE ~ "Rest"),
    rleid = NULL
  )
Run Code Online (Sandbox Code Playgroud)

虽然,如何在我的数据集中考虑每个不同的名称/个人?

谢谢.

tal*_*lat 5

这是dplyr的另一种方法

library(dplyr)

ExampleData %>% 
  group_by(Name) %>% 
  mutate(Descriptor = with(rle(Period == 1), 
             rep(replace(paste("Period", cumsum(values)), !values, NA), lengths)))

# # A tibble: 20 x 4
# # Groups:   Name [2]
# Name Period       DV Descriptor
# <fctr>  <dbl>    <dbl>      <chr>
#   1    Tom      0 2.641044       <NA>
#   2    Tom      0 2.692745       <NA>
#   3    Tom      1 1.515797   Period 1
#   4    Tom      1 2.601471   Period 1
#   5    Tom      1 1.669399   Period 1
#   6    Tom      0 2.700371       <NA>
#   7    Tom      0 1.993971       <NA>
#   8    Tom      0 2.203379       <NA>
#   9    Tom      1 2.488742   Period 2
#  10    Tom      1 1.596458   Period 2
#  11    Ben      0 2.578924       <NA>
#  12    Ben      0 1.916804       <NA>
#  13    Ben      0 2.676466       <NA>
#  14    Ben      1 2.508759   Period 1
#  15    Ben      1 2.447217   Period 1
#  16    Ben      1 2.728756   Period 1
#  17    Ben      0 2.326854       <NA>
#  18    Ben      0 1.748016       <NA>
#  19    Ben      1 1.703044   Period 2
#  20    Ben      1 1.783434   Period 2
Run Code Online (Sandbox Code Playgroud)