我有一個如下所示的資料集:
Recipient ID
(chr) (chr)
Smith C
Wells S
Wells S
Jones S
Jones N
Wu C
Wu N
Wu S
我想改變一個新變數,它是“唯一”或“多個”,基于收件人是否出現一次(唯一),收件人出現多次但每次出現都具有相同的 ID(唯一),收件人出現超過一次 AND 有 1 個或多個 ID(多個)。我試過使用:
df %>%
group_by(Recipient, ID) %>%
mutuate(Freq = case_when(
str_count(Recipient) == 1 & str_count(ID) == 1 ~ "Unique",
str_count(Recipient) > 2 & str_count(ID) == 1 ~ "Unique",
str_count(Recipient) > 2 & str_count(ID) > 1 ~ "Multiple"))
當我這樣做時,所有值都是多個:
Recipient ID Freq
(chr) (chr) (chr)
Smith C Multiple (should be Unique)
Wells S Multiple (should be Unique)
Wells S Multiple (should be Unique)
Jones S Multiple
Jones N Multiple
Wu C Multiple
Wu N Multiple
Wu S Multiple
我試了很多次,還是破解不了。任何人都可以幫助解決這個問題,或者推薦一種更簡單的編碼方法嗎?謝謝!
uj5u.com熱心網友回復:
一個可能的解決方案n_distinct():
library(dplyr)
df %>%
group_by(Recipient) %>%
mutate(Freq = ifelse(n_distinct(ID) == 1, "unique", "multiple")) %>%
ungroup()
# A tibble: 8 x 3
Recipient ID Freq
<chr> <chr> <chr>
1 Smith C unique
2 Wells S unique
3 Wells S unique
4 Jones S multiple
5 Jones N multiple
6 Wu C multiple
7 Wu N multiple
8 Wu S multiple
資料
df <- structure(list(Recipient = c("Smith", "Wells", "Wells", "Jones",
"Jones", "Wu", "Wu", "Wu"), ID = c("C", "S", "S", "S", "N", "C",
"N", "S")), class = "data.frame", row.names = c(NA, -8L))
uj5u.com熱心網友回復:
以下是澄清后的更新:
library(dplyr)
df %>%
group_by(Recipient) %>%
mutate(Freq = paste(Recipient, ID),
Freq = ifelse(Freq %in% Freq[duplicated(Freq)], "unique", "multiple"),
Freq = ifelse(Recipient %in% Recipient[duplicated(Recipient)], Freq, "unique"))
Recipient ID Freq
<chr> <chr> <chr>
1 Smith C unique
2 Wells S unique
3 Wells S unique
4 Jones S multiple
5 Jones N multiple
6 Wu C multiple
7 Wu N multiple
8 Wu S multiple
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/460004.html
標籤:r
上一篇:繼承期間未決議的參考
下一篇:拆分列資料以創建新行
