我有一個變數資料框,雖然我想保留所有原始資料,但我也想創建一個新行,它是以“Justin -”開頭的所有內容的總和,稱為“Justin - All”。我可以想到采取許多步驟的方法,但我想知道是否有一些節儉的方法來進行這種轉變。
這是原始資料:
library(dplyr)
test <- tibble(name = c("Justin - Pre", "Justin - Post", "Sibley", "Corey"),
sex = c("Male", "Male", "Female", "Male"),
test = c(1, 2, 5, 10),
exam = c(5, 5, 100, 101))
outcome <- tibble(name = c("Justin - Pre", "Justin - Post", "Sibley", "Corey", "Justin All"),
sex = c("Male", "Male", "Female", "Male", "Male"),
test = c(1, 2, 5, 10, 3),
exam = c(5, 5, 100, 101, 10))
有沒有使用 dplyr / tidyr 的簡單方法,還是我應該準備好進行多步旅程?
uj5u.com熱心網友回復:
這是一種方法,它根據每個名稱的第一個單詞對每個名稱進行求和,保持具有多個觀察值的組(即這里只是 Justin),并將其整理到原始資料中。
library(dplyr)
bind_rows(
test,
test %>%
group_by(name = stringr::word(name, 1), sex) %>%
summarize(across(everything(), sum), n = n(), .groups = "drop") %>%
filter(n > 1) %>% select(-n) %>%
mutate(name = paste(name, "- Total"))) %>%
arrange(name)
# A tibble: 5 × 4
name sex test exam
<chr> <chr> <dbl> <dbl>
1 Corey Male 10 101
2 Justin - Post Male 2 5
3 Justin - Pre Male 1 5
4 Justin - Total Male 3 10
5 Sibley Female 5 100
或賈斯汀特定的變體:
bind_rows(
test,
test %>%
filter(name %>% stringr::str_starts("Justin")) %>%
mutate(name = paste(stringr::word(name, 1), "- Total")) %>%
group_by(name, sex) %>%
summarize(across(everything(), sum), .groups = "drop")
) %>%
arrange(name)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/522760.html
標籤:rdplyr蒂迪尔
