【问题标题】:R: Assign value to group based on conditionR:根据条件为组分配值
【发布时间】:2020-12-03 01:47:50
【问题描述】:

我有一个问题是给一个组赋值。例如我的数据如下:

example.frame = data.frame("ID" = c(1,1,1,1,2,2,2,3,3,3,3,4,4), "AL" = c(1,1,2,4,2,3,4,1,5,1,2,3,4))

现在我想生成一个新变量true,如果任何 AL 包含一个 1,那么它会将 1 分配给整个组 (ID),这样生成的数据帧如下所示:

example.frame = data.frame("ID" = c(1,1,1,1,2,2,2,3,3,3,3,4,4), "AL" = c(1,1,2,4,1,3,4,1,5,1,2,3,4), "true" = c(1,1,1,1,0,0,0,1,1,1,1,0,0))

如果有人知道如何做到这一点,那就太好了。

【问题讨论】:

标签: r grouping


【解决方案1】:
library(tidyverse)
example.frame = data.frame("ID" = c(1,1,1,1,2,2,2,3,3,3,3,4,4), "AL" = c(1,1,2,4,2,3,4,1,5,1,2,3,4))

example.frame %>% 
  group_by(ID) %>% 
  mutate(true=length(AL[AL==1])) %>%  #number of 1s per group 
  mutate(true=case_when(true>0 ~ 1,  #if larger than 0 => 1
                        TRUE ~ 0))
#> # A tibble: 13 x 3
#> # Groups:   ID [4]
#>       ID    AL  true
#>    <dbl> <dbl> <dbl>
#>  1     1     1     1
#>  2     1     1     1
#>  3     1     2     1
#>  4     1     4     1
#>  5     2     2     0
#>  6     2     3     0
#>  7     2     4     0
#>  8     3     1     1
#>  9     3     5     1
#> 10     3     1     1
#> 11     3     2     1
#> 12     4     3     0
#> 13     4     4     0

由reprex package 创建于 2020-12-02 (v0.3.0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    相关资源
    最近更新 更多