R programming - data frame manoevur

前端 未结 1 670
旧巷少年郎
旧巷少年郎 2021-01-29 10:10

Suppose I have the following dataframe:

   dc tmin tmax cint wcmin wcmax wsmin wsmax gsmin gsmax  wd rmin rmax  cir lr
1: 24   -1    4    5    -5    -2    20             


        
相关标签:
1条回答
  • 2021-01-29 10:36

    Try

    library(data.table)
    unique(setDT(df1)[, factdcx:= as.character(factdcx)][factdcx %chin% 
      c('48','50'), c('dc', 'factdcx', 'nF') := list('48', '48', sum(nF))])
    #    dc tmin tmax cint wcmin wcmax wsmin wsmax gsmin gsmax  wd rmin rmax  cir lr
    #1: 24   -1    4    5    -5    -2    20    25    35    40  90 11.8 26.6 14.8  3
    #2: 41   -3    5    8    -8    -3    15    20    35    40  90 10.0 23.5 13.5  3
    #3: 48    0    5    5    -4     0    30    35    45    50  45  7.3 19.0 11.7  6
    #4: 52    3    5    2    -3     1    20    25    35    40  45  6.7 17.4 10.7  6
    #5: 57   -2    5    7    -6    -1    25    30    35    40 315  4.4 13.8  9.4  7
    #   lc wc    li yd   yr nF factdcx
    #1:  1  3  TRUE  1 2010  2      24
    #2:  1  3  TRUE  1 2010  8      41
    #3:  2  3  TRUE  1 2010  0      48
    #4:  2  3  TRUE  1 2010  0      52
    #5:  3  3 FALSE  1 2010  0      57
    

    For abc1,

     res1 <- unique(setDT(abc1)[, factdcx:= as.character(factdcx)][factdcx %chin% 
       c('48','50'), c('dc', 'factdcx', 'nF') := list(48, '48', sum(nF))])
     res1
    #     dc tmin tmax cint wcmin wcmax wsmin wsmax gsmin gsmax  wd rmin rmax  cir lr
    #1: 24   -1    4    5    -5    -2    20    25    35    40  90 11.8 26.6 14.8  3
    #2: 41   -3    5    8    -8    -3    15    20    35    40  90 10.0 23.5 13.5  3
    #3: 48    0    5    5    -4     0    30    35    45    50  45  7.3 19.0 11.7  6
    #4: 52    3    5    2    -3     1    20    25    35    40  45  6.7 17.4 10.7  6
    #5: 57   -2    5    7    -6    -1    25    30    35    40 315  4.4 13.8  9.4  7
    #   lc wc    li yd   yr nF factdcx
    #1:  1  3  TRUE  1 2010  2      24
    #2:  1  3  TRUE  1 2010  8      41
    #3:  2  3  TRUE  1 2010  0      48
    #4:  2  3  TRUE  1 2010  0      52
    #5:  3  3 FALSE  1 2010  0      57
    

    data

    df1 <-  structure(list(dc = structure(1:6, .Label = c("24", "41",
    "48", 
    "50", "52", "57"), class = "factor"), tmin = c(-1L, -3L, 0L, 
    0L, 3L, -2L), tmax = c(4L, 5L, 5L, 5L, 5L, 5L), cint = c(5L, 
    8L, 5L, 5L, 2L, 7L), wcmin = c(-5L, -8L, -4L, -4L, -3L, -6L), 
    wcmax = c(-2L, -3L, 0L, 0L, 1L, -1L), wsmin = c(20L, 15L, 
    30L, 30L, 20L, 25L), wsmax = c(25L, 20L, 35L, 35L, 25L, 30L
    ), gsmin = c(35L, 35L, 45L, 45L, 35L, 35L), gsmax = c(40L, 
    40L, 50L, 50L, 40L, 40L), wd = c(90L, 90L, 45L, 45L, 45L, 
    315L), rmin = c(11.8, 10, 7.3, 7.3, 6.7, 4.4), rmax = c(26.6, 
    23.5, 19, 19, 17.4, 13.8), cir = c(14.8, 13.5, 11.7, 11.7, 
    10.7, 9.4), lr = c(3L, 3L, 6L, 6L, 6L, 7L), lc = c(1L, 1L, 
    2L, 2L, 2L, 3L), wc = c(3L, 3L, 3L, 3L, 3L, 3L), li = c(TRUE, 
    TRUE, TRUE, TRUE, TRUE, FALSE), yd = c(1L, 1L, 1L, 1L, 1L, 
    1L), yr = c(2010L, 2010L, 2010L, 2010L, 2010L, 2010L), nF = c(2L, 
    8L, 0L, 0L, 0L, 0L), factdcx = structure(1:6, .Label = c("24", 
    "41", "48", "50", "52", "57"), class = "factor")), .Names = c("dc", 
    "tmin", "tmax", "cint", "wcmin", "wcmax", "wsmin", "wsmax", "gsmin", 
     "gsmax", "wd", "rmin", "rmax", "cir", "lr", "lc", "wc", "li", 
    "yd", "yr", "nF", "factdcx"), row.names = c("1:", "2:", "3:", 
    "4:", "5:", "6:"), class = "data.frame")
    
    0 讨论(0)
提交回复
热议问题