【问题标题】:Subset values with matching criteria in rr 中具有匹配条件的子集值
【发布时间】:2020-01-23 16:18:11
【问题描述】:

我有一个类似的问题here,但这个问题略有不同。

我想根据评分标准在另一列中返回具有匹配条件的值。如果变量中没有切割分数,我想为第一次和第二次切割获取最接近的较大值,并为第三次切割获取最接近的最小值。这是数据集的快照:

ids <- c(1,2,3,4,5,6,7,8,9,10)
scores.a <- c(512,531,541,555,562,565,570,572,573,588)
scores.b <- c(12,13,14,15,16,17,18,19,20,21)
data <- data.frame(ids, scores.a, scores.b)
> data
   ids scores.a scores.b
1    1      512       12
2    2      531       13
3    3      541       14
4    4      555       15
5    5      562       16
6    6      565       17
7    7      570       18
8    8      572       19
9    9      573       20
10  10      588       21

cuts <- c(531, 560, 571)

我想获取与第一个分数对应的score.b值,即13。然后,抓取第二切(560)分数对应的score.b值,但它不在score.a中,所以我想获取score.a值562(最接近larger到@987654328 @),对应的值为16。最后,对于第三切分数(​​571),我想得到 18,这是最接近第三切分数的smaller 值(570)的对应值。

这是我想要的。

       scores.b
cut.1  13
cut.2  16
cut.3  18

有什么想法吗? 谢谢

【问题讨论】:

    标签: r recode


    【解决方案1】:

    使用tidyverse

    data %>% 
    mutate(cuts_new = cut(scores.a, breaks = c(531,560,570, 1000), right = F)) %>% 
    group_by(cuts_new) %>% summarise(first_sb = first(scores.b)) %>% 
    ungroup()
    

    结果:

    # A tibble: 4 x 2
      cuts_new    first_sb
      <fct>          <dbl>
    1 [531,560)         13
    2 [560,570)         16
    3 [570,1e+03)       18
    4 NA                12
    

    【讨论】:

    • 感谢@akash87 的解决方案!
    【解决方案2】:
    data %>% 
       mutate(cts = Hmisc::cut2(scores.a, cuts = cuts)) %>% 
       group_by(cts) %>% 
       summarise( mn = min(scores.b),
                  mx = max(scores.b)) %>% 
       slice(-c(1,4)) %>% unlist() %>% .[c(3,4,6)] %>% 
       data.frame() %>% 
       magrittr::set_colnames("scores.b") %>% 
       magrittr::set_rownames(c("cut.1", "cut.2", "cut.3"))
    
          scores.b
    cut.1       13
    cut.2       16
    cut.3       18
    

    【讨论】:

    • 感谢@jyjek,我收到了类似Error in slice_impl(.data, dots) : slice only accepts one expression 的错误。你有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 2018-09-15
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    相关资源
    最近更新 更多