代码之家  ›  专栏  ›  技术社区  ›  SteveS

是否在r中的数据帧的其他列中添加依赖于变量的索引?

  •  1
  • SteveS  · 技术社区  · 6 年前

    这是我的数据框架:

    structure(list(a = c(1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1)), .Names = "a", row.names = c(NA, 
    -11L), class = c("tbl_df", "tbl", "data.frame"))
    

    现在,我想添加一个标识列,其作用类似于索引:

    我的意思是,我想添加一个从id=1开始的列,每次有-1时,将其设置为id=2,依此类推: 预期:

    structure(list(a = c(1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1), b = c(1, 
    1, 2, 2, 2, 2, 3, 3, 3, 3, 3)), .Names = c("a", "b"), row.names = c(NA, 
    -11L), class = c("tbl_df", "tbl", "data.frame"))
    

    使用的解决方案来自 R add index column to data frame based on row values 不适合我的需要。

    2 回复  |  直到 6 年前
        1
  •  3
  •   acylam    6 年前

    cumsum a==-1

    library(dplyr)
    
    df1 %>%
      mutate(b = cumsum(a == -1) + 1)
    

    df1$b = cumsum(df1$a == -1) + 1
    

    # A tibble: 11 x 2
           a     b
       <dbl> <dbl>
     1     1     1
     2     1     1
     3    -1     2
     4     1     2
     5     1     2
     6     1     2
     7    -1     3
     8     1     3
     9     1     3
    10     1     3
    11     1     3
    

    df1 = structure(list(a = c(1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1)), .Names = "a", row.names = c(NA, 
    -11L), class = c("tbl_df", "tbl", "data.frame"))
    
        2
  •  1
  •   kabr hrbrmstr    6 年前

    1. 1 -1

    2. index cumsum

      library(dplyr)
      
      df %>%
        mutate(helper = ifelse(row_number()==1, 1, 
          ifelse(a == -1, 1, 0))) %>% 
        mutate(index = cumsum(helper)) %>%
        select(-helper)