[英]Identify the groups sharing a duplicated value
我有一個數據框,總結了由序列號標識的不同設備的部署歷史。 隨着時間的推移,設備( serno
)可以被不同的項目使用,但在任何給定時間只能部署在一個項目上。 我生成了一個名為used.elsewhere
的新列,用於標識該行中的 serno 是否在 df 中重復。 例如:
project = c("a","b","c","c","c","d","e")
serno = c(1,2,2,2,3,3,3)
deployed = c(T,T,F,F,F,F,T)
used.elsewhere = c(F,T,T,T,T,T,T)
data.frame(project,serno,deployed,used.elsewhere)
project serno deployed used.elsewhere
1 a 1 TRUE FALSE
2 b 2 TRUE TRUE
3 c 2 FALSE TRUE
4 c 2 FALSE TRUE
5 c 3 FALSE TRUE
6 d 3 FALSE TRUE
7 e 3 TRUE TRUE
我想生成一個新列,如果未部署 serno 值並在其他地方使用,則指示部署 serno 的項目:
project = c("a","b","c","c","c","d","e")
serno = c(1,2,2,2,3,3,3)
deployed = c(T,T,F,F,F,F,T)
used.elsewhere = c(F,T,T,T,T,T,T)
other.project = c(NA, NA, "b", "b", "e", "e", NA)
project serno deployed used.elsewhere other.project
1 a 1 TRUE FALSE <NA>
2 b 2 TRUE TRUE <NA>
3 c 2 FALSE TRUE b
4 c 2 FALSE TRUE b
5 c 3 FALSE TRUE e
6 d 3 FALSE TRUE e
7 e 3 TRUE TRUE <NA>
我假設我可以使用如下ifelse
語句,但我不確定如何完成它。
df %>%
mutate(other.project = ifelse(deployed == F & used.elsewhere == T, ...
先感謝您!
如果您首先group_by(serno)
,則可以在同一組中包含deployed
為 TRUE 的project
。
library(dplyr)
df %>%
group_by(serno) %>%
mutate(other.project = ifelse(
deployed == FALSE & used.elsewhere == TRUE,
project[deployed],
NA
))
Output
project serno deployed used.elsewhere other.project
<chr> <dbl> <lgl> <lgl> <chr>
1 a 1 TRUE FALSE NA
2 b 2 TRUE TRUE NA
3 c 2 FALSE TRUE b
4 c 2 FALSE TRUE b
5 c 3 FALSE TRUE e
6 d 3 FALSE TRUE e
7 e 3 TRUE TRUE NA
我建議構建部署映射,然后將其與您的 df 連接:
library(dplyr)
deployments <- df %>%
filter(deployed == TRUE) %>%
select(serno, other.project = project)
df %>%
left_join(deployments)
然后,您只需要確保您在需要它們的other.project
列中有 NA(即,通過重新編碼 where other.project == project
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.