我的例子
df <- data. frame(id1 = c("a"/span> 。 "b", "c"),
id2 = c("a"。 "a", "d"),
n1 = c(2。 2,0),
n2 = c(2。 1,1),
n3 = c(0。 1,1),
n4 = c(0。 1,1))
首先,我已經像這樣將所有的行跨列聚集起來了
df <- df %>%
group_by(id2)%>%
總結(across(c(n1, n2。 n3,n4), sum, na. rm = TRUE),
.group = "drop")
現在,但現在我想只聚合2個第一行,在id2列有a。我們如何保留id1這一列,因為我希望的輸出是這樣的。老實說,這一列只是用來與id2進行比較,是非常多余的,但我真的想保留它。
id1 id2 n1 n2 n3 n4
a a 4 3 1 1
c d 0 1 1 1
對此有什么建議嗎?
uj5u.com熱心網友回復:
改變id2值,其中有'a'。
library(dplyr)
df %>%。
group_by(id1 = ifelse(id2 == 'a'/span>。 id2, id1), id2) %> %
概述(across(starts_with('n'/span>)。 sum, na. rm = TRUE), 。 groups = "drop") 。
# id1 id2 n1 n2 n3 n4
# <chr> <chr> <dbl> <dbl> <dbl>/span>
#1 a a 4 3 1 1
#2 c d 0 1 1 1
uj5u.com熱心網友回復:
另一個解決方案是使用case_when。如果你需要使用多個案例的句子,這個函式更容易閱讀:
library(dplyr)
df %>%
mutate(id1 = case_when()
id2 == 'a' ~ id2,
TRUE ~ id1
)) %>%
group_by(id1, id2) %>%
概述(across(starts_with('n'/span>)。 sum, na. rm = TRUE),
.group = "drop")
這就產生了:
## A tibble: 2 x 6
# id1 id2 n1 n2 n3 n4
# <chr> <chr> <dbl> <dbl> <dbl>
#1 a a 4 3 1 1
#2 c d 0 1 1 1
注意:
。summarise部分是從@Ronak Shah的答案中復制的
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/306854.html
標籤:
