代码之家  ›  专栏  ›  技术社区  ›  Peter Chen

将值更改为其他值和总和值

  •  -1
  • Peter Chen  · 技术社区  · 8 年前


    我会在这里解释。

    ColA     ColB   ColC   ColD    ColE
    APPLE    1      A      100      30 
    APPLE    1      B      200      20
    APPLE    1      C      100      50
    APPLE    1      D       50     100
    APPLE    1      E       50     100
    APPLE    2      C       50     100 
    BANANA   1      A       30      50
    BANANA   1      C       20      20
    BANANA   3      B      100     100
    BANANA   3      C       50      50
    BANANA   3      D      100     200
    

    ColC , A B X ColD ColE
    如果 ColC公司 C D E ,应该是 Y
    结果如下:

    ColA    ColB    ColC    ColD    ColE
    APPLE    1       X       300     50
    APPLE    1       Y       200    250
    APPLE    2       Y        50    100
    BANANA   1       X        30     50
    BANANA   1       Y        20     20
    BANANA   3       X       100    100
    BANANA   3       Y       150    250    
    

    :

    dt <- fread("ColA     ColB   ColC   ColD    ColE
    APPLE    1      A      100      30 
    APPLE    1      B      200      20
    APPLE    1      C      100      50
    APPLE    1      D       50     100
    APPLE    1      E       50     100
    APPLE    2      C       50     100 
    BANANA   1      A       30      50
    BANANA   1      C       20      20
    BANANA   3      B      100     100
    BANANA   3      C       50      50
    BANANA   3      D      100     200
    ")
    
    3 回复  |  直到 8 年前
        1
  •  4
  •   Jaap    8 年前

    假设您有一个数据表(由于 fread )那么这里有一个想法。

    library(data.table)
    
    dt[, ColC := ifelse(ColC %in% c('A', 'B'), 'X', 'Y')
       ][, lapply(.SD, sum), by = .(ColA, ColB, ColC)][]
    

         ColA ColB ColC ColD ColE
    1:  APPLE    1    X  300   50
    2:  APPLE    1    Y  200  250
    3:  APPLE    2    Y   50  100
    4: BANANA    1    X   30   50
    5: BANANA    1    Y   20   20
    6: BANANA    3    X  100  100
    7: BANANA    3    Y  150  250
    
        2
  •  2
  •   Axeman    8 年前

    一些基本的 dplyr :

    case_when 要更改变量,请分组并求和。

    library(dplyr)
    dt %>% 
      mutate(ColC = case_when(ColC %in% c("A", "B") ~ "X", TRUE ~ "Y")) %>% 
      group_by(ColA, ColB, ColC) %>% 
      summarise_all(sum)
    

    # A tibble: 7 x 5
    # Groups:   ColA, ColB [?]
        ColA  ColB  ColC  ColD  ColE
       <chr> <int> <chr> <int> <int>
    1  APPLE     1     X   300    50
    2  APPLE     1     Y   200   250
    3  APPLE     2     Y    50   100
    4 BANANA     1     X    30    50
    5 BANANA     1     Y    20    20
    6 BANANA     3     X   100   100
    7 BANANA     3     Y   150   250
    
        3
  •  0
  •   dondapati    7 年前
    dt$ColC <- plyr::revalue(dt$ColC,c("A"="x","B"="x","C"="Y","D"="Y","E"="Y"))
    
    dt %>% 
         group_by(ColA,ColB,ColC) %>% 
                                   summarise_all(sum)