0

对于以下数据集,我想确定sl所有 y 为零的数据集。

mydata
                    y  x  sl
        1   199.92989  1   1
        2    27.73883  2   1
        3   144.00000  3   1
        4    72.00000  4   1
        5     0.00000  5   1
        6   392.60636  1   2
        7   749.52499  2   2
        8  3120.00000  3   2
        9  1600.00000  4   2
        10 1000.00000  5   2
        11 5840.00000  6   2
        12 3960.00000  7   2
        13 4700.00000  8   2
        14 1660.00000  9   2
        15 5620.00000 10   2
        16    0.00000  1 585
        17    0.00000  2 585
        18    0.00000  3 585
        19 3062.32962  1 587
        20 2048.97458  2 587
        21 1280.00000  3 587
        22 1440.00000  4 587
        23 2960.00000  5 587
        24  460.00000  6 587
        25  530.00000  7 587
        26 5190.00000  8 587
        27 3200.00000  9 587
        28 4620.00000 10 587
        29    0.00000  1 651
        30    0.00000  2 651
        31    0.00000  3 651
        32    0.00000  4 651

预期的答案是 585651。任何帮助表示赞赏。

4

2 回答 2

3

您可以使用tapply将功能应用于y分组依据sl

sl_y0 <- with(mydata, tapply(y, sl, function(y) all(y == 0)))
names(sl_y0)[sl_y0]     

# [1] "585" "651"

或使用 dplyr

library(dplyr)

mydata %>% 
  group_by(sl) %>% 
  summarise(ally_eq0 = all(y == 0)) %>% 
  filter(ally_eq0) %>% 
  pull(sl)

# [1] 585 651

或数据表

library(data.table)
setDT(mydata)

mydata[, if(all(y == 0)) sl, sl][, sl]
# [1] 585 651
于 2020-01-13T04:03:56.980 回答
0

除了@IceCreamToucantapply()之外的另一个基本 R 解决方案是使用+ ,即split()sapply()

res <- names(which(sapply(split(mydata,mydata$sl),function(v) all(v$y==0))))

这样

> res
[1] "585" "651"
于 2020-01-13T06:39:26.460 回答