[英]Tidyverse method for combining sets of columns based on a condition in the column names
假設我的 dataframe 中有以下列(以及其他列)(感謝 Allan 創建示例數據):
20L, 15L), b_years = c(4L, 5L, 3L), b_months = 0:2, b_days = c(10L,
8L, 6L), c_years = 8:6, c_months = c(11L, 9L, 8L), c_days = c(26L,
19L, 18L)), class = "data.frame", row.names = c(NA, -3L))
df
#> a_years a_months a_days b_years b_months b_days c_years c_months c_days
#> 1 5 6 23 4 0 10 8 11 26
#> 2 4 7 20 5 1 8 7 9 19
#> 3 3 8 15 3 2 6 6 8 18
我想組合以相同分組鍵開頭的列(在本例中是開頭的字母,但在我的數據中它是一個更長的表達式),這樣我就可以得到a_days, b_days, c_days
等列,其中的值在 eahc 列中等於x_years * 365 + x_months * 30 + x_days
,對於每組( a, b, c, d, e
等)列。
有沒有辦法一次性完成這一切? 想到了map()
和mutate()
的某種組合,或者可能使用case_when()
,但我不太明白。 感謝您提供的任何指導!
你可以across
內部transmute
來做到這一點:
library(dplyr)
df %>%
transmute(across(contains("days"), ~ .x) +
across(contains("months"), ~ .x * 30) +
across(contains("years"), ~ .x * 365))
#> a_days b_days c_days
#> 1 2028 1470 3276
#> 2 1690 1863 2844
#> 3 1350 1161 2448
樣本數據
df <- structure(list(a_years = 5:3, a_months = 6:8, a_days = c(23L,
20L, 15L), b_years = c(4L, 5L, 3L), b_months = 0:2, b_days = c(10L,
8L, 6L), c_years = 8:6, c_months = c(11L, 9L, 8L), c_days = c(26L,
19L, 18L)), class = "data.frame", row.names = c(NA, -3L))
df
#> a_years a_months a_days b_years b_months b_days c_years c_months c_days
#> 1 5 6 23 4 0 10 8 11 26
#> 2 4 7 20 5 1 8 7 9 19
#> 3 3 8 15 3 2 6 6 8 18
創建於 2022-09-29,使用reprex v2.0.2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.