如何添加具有特定于分组变量的值的新列

How to add a new column with values specific to grouped variables

我是 R 的新手,已经找到了解决我的问题的类似解决方案,但我正在努力将这些解决方案应用到我的代码中。请帮忙...

这些数据被简化了,因为id变量很多:

df = data.frame(id = rep(c("a_10", "a_11", "b_10", "b_11"), each = 5),
           site = rep(1:5, 4),
           value = sample(1:20))

目的是添加另一个标有“年份”的列,其中的值按“id”分组,但真实姓名很多 - 所以我试图通过使用结尾数字来简化代码。

我可以使用 dplyr 使用此代码将数据帧拆分为每个 id 变量(对每个 id 变量重复):

df %>% 
  select(site, id, value) %>% 
  filter(grepl("10$", id)) %>% 
  mutate(Year = "2010")`

而不是使用merge将数据帧重新组合成一个,有没有更简单的方法?

我尝试按照之前的回答中所述将 case_when 修改为 mutate

[

mutate(year = case_when(grepl(c("10$", "11$", id) == c("2010", "2011"))))

这样的事情可能吗??

提前致谢

您可以使用 substr 获取 id 的最后两位数字,然后 paste0 将其转换为“20”以重新创建年份。

df |> dplyr::mutate(Year = paste0("20", substr(id, 3, 4)))
#>      id site value Year
#> 1  a_10    1     5 2010
#> 2  a_10    2    12 2010
#> 3  a_10    3     9 2010
#> 4  a_10    4     7 2010
#> 5  a_10    5    13 2010
#> 6  a_11    1     3 2011
#> 7  a_11    2     4 2011
#> 8  a_11    3    16 2011
#> 9  a_11    4     2 2011
#> 10 a_11    5     6 2011
#> 11 b_10    1    19 2010
#> 12 b_10    2    14 2010
#> 13 b_10    3    15 2010
#> 14 b_10    4    10 2010
#> 15 b_10    5    11 2010
#> 16 b_11    1    18 2011
#> 17 b_11    2     1 2011
#> 18 b_11    3    20 2011
#> 19 b_11    4    17 2011
#> 20 b_11    5     8 2011

reprex package (v2.0.1)

创建于 2022-04-21

如果您的 id 列有不同的字符串长度,您可以使用 sub:

df %>%
  mutate(Year = paste0("20", sub('^.*_(\d+)$', '\1', id)))
#>      id site value Year
#> 1  a_10    1     2 2010
#> 2  a_10    2     7 2010
#> 3  a_10    3    16 2010
#> 4  a_10    4    10 2010
#> 5  a_10    5    11 2010
#> 6  a_11    1     5 2011
#> 7  a_11    2    13 2011
#> 8  a_11    3    14 2011
#> 9  a_11    4     6 2011
#> 10 a_11    5    12 2011
#> 11 b_10    1    17 2010
#> 12 b_10    2     1 2010
#> 13 b_10    3     4 2010
#> 14 b_10    4    15 2010
#> 15 b_10    5     9 2010
#> 16 b_11    1     8 2011
#> 17 b_11    2    20 2011
#> 18 b_11    3    19 2011
#> 19 b_11    4    18 2011
#> 20 b_11    5     3 2011

reprex package (v2.0.1)

创建于 2022-04-21