簡體   English   中英

識別共享重復值的組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM