我想根据文本列(col_range)中给出的列范围为行总计创建新列。我尝试了以下操作,但它引发了错误。有谁知道如何做到这一点。
d = data.frame(index_id = c("a1232","c198", "s345","2ert", "e234","e567"),
yr_ref = c(2023,2024,2025,2024,2027,NA),
temp2023 = c(2000,5000,2300,2000,1000,200),
temp2024 = c(3000,3000,3000,0,0,200),
temp2025 = c(2000,3000,0,800,8000,200),
temp2026 = c(300,200,1000,0,0,200),
temp2027= c(1300,1200,100,10,10,200),
col_range = c("temp2023:temp2023","temp2023:temp2024","temp2023:temp2025","temp2023:temp2024","temp2023:temp2027",NA))
d= d %>%
mutate(temp_total= ifelse(!is.na(yr_ref),
sum(c_across(col_range)),NA))
#### ERROR
Error in `mutate()`:
ℹ In argument: `temp_total = ifelse(!is.na(yr_ref), sum(c_across(col_range)), NA)`.
Caused by error in `sum()`:
! invalid 'type' (character) of argument
Run `rlang::last_trace()` to see where the error occurred.```
这是如何处理错误的一种选择:
d %>%
rowwise() %>%
mutate(temp_total = ifelse(!is.na(yr_ref), sum(c_across(matches("temp\\d{4}"))), NA)) %>%
ungroup()
# A tibble: 6 × 9
index_id yr_ref temp2023 temp2024 temp2025 temp2026 temp2027 col_range temp_total
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl>
1 a1232 2023 2000 3000 2000 300 1300 temp2023:temp2023 8600
2 c198 2024 5000 3000 3000 200 1200 temp2023:temp2024 12400
3 s345 2025 2300 3000 0 1000 100 temp2023:temp2025 6400
4 2ert 2024 2000 0 800 0 10 temp2023:temp2024 2810
5 e234 2027 1000 0 8000 0 10 temp2023:temp2027 9010
6 e567 NA 200 200 200 200 200 NA NA