簡體   English   中英

通過 R 中的組確定值是否重復

[英]Identify if a value is repeated or not by groups in R

我有一個包含許多列和行的數據。 我想通過創建新的邏輯變量來確定一個組的值是否重復(相同)。

所以我的數據是這樣的:

v0 <- c(1,2,3,4,5,6,7,8,9)
v1 <- c("a", "b", "a", "c","e", "c", "b", "b", "e")
v2 <- c("R", NA, "R", "R", "G","C", "R", "R", "G")
dftest <- data.frame(v0, v1, v2)

  v0 v1   v2
1  1  a    R
2  2  b <NA>
3  3  a    R
4  4  c    R
5  5  e    G
6  6  c    C
7  7  b    R
8  8  b    R
9  9  e    G

無論相同的 v1 值是否采用相同的 v2 值,我都需要以某種方式比較 v1 和 v2 的值。 所以我的輸出 df 看起來像這樣:

v3 <- c(T, F, T, F, T, F, F, F, T )
dfresult <- data.frame(v0, v1, v2, v3)

  v0 v1   v2    v3
1  1  a    R  TRUE
2  2  b <NA> FALSE
3  3  a    R  TRUE
4  4  c    R FALSE
5  5  e    G  TRUE
6  6  c    C FALSE
7  7  b    R FALSE
8  8  b    R FALSE
9  9  e    G  TRUE

任何saggestion將不勝感激。 謝謝。

一種方法如下。 就我看到的問題而言,當一組中的v2中只有一個唯一值時,您似乎想返回 TRUE。 否則,您要返回 FALSE。

library(dplyr)

group_by(dftest, v1) %>% 
mutate(v3 = n_distinct(v2) == 1)

#     v0 v1    v2    v3   
#  <dbl> <fct> <fct> <lgl>
#1     1 a     R     TRUE 
#2     2 b     NA    FALSE
#3     3 a     R     TRUE 
#4     4 c     R     FALSE
#5     5 e     G     TRUE 
#6     6 c     C     FALSE
#7     7 b     R     FALSE
#8     8 b     R     FALSE
#9     9 e     G     TRUE

如果使用 data.table 包,則可以執行以下操作。

setDT(dftest)[, v3 := uniqueN(v2) == 1, by = v1][]

這是一個基本的 R 解決方案,其中使用了ave

dfresult <- within(dftest, v3 <- as.logical(ave(as.vector(v2),v1,FUN = function(x) length(unique(x))==1)))

以至於

> dfresult
  v0 v1   v2    v3
1  1  a    R  TRUE
2  2  b <NA> FALSE
3  3  a    R  TRUE
4  4  c    R FALSE
5  5  e    G  TRUE
6  6  c    C FALSE
7  7  b    R FALSE
8  8  b    R FALSE
9  9  e    G  TRUE

使用data.table包的選項:

library(data.table)
setDT(dftest)[, v3 := uniqueN(v2)==1L, v1]

輸出:

   v0 v1   v2    v3
1:  1  a    R  TRUE
2:  2  b <NA> FALSE
3:  3  a    R  TRUE
4:  4  c    R FALSE
5:  5  e    G  TRUE
6:  6  c    C FALSE
7:  7  b    R FALSE
8:  8  b    R FALSE
9:  9  e    G  TRUE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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