首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查相同的值,我们在R中的其他列中有相同的唯一值

检查相同的值,我们在R中的其他列中有相同的唯一值
EN

Stack Overflow用户
提问于 2018-02-14 09:27:56
回答 3查看 379关注 0票数 0

我有下面提到的数据:

注意:我在dataframe中有大约20万行,并且希望在dataframe中运行逻辑。

代码语言:javascript
复制
ID Num MAX CH
1  22  A   XCA-1
2  24  B   VBS-1
3  54  A   XCA-1
4  48  A   XCA-1
5  88  C   CXV-1
6  87  B   VBS-1
7  98  A   VBS-0

如何检查每个MAX值,我们在整个数据格式中都有相同的CH,并添加一个状态(即匹配或不匹配)的新列。

所需数据:

代码语言:javascript
复制
ID Num MAX CH  ST
1  22  A   XCA-1 Not Match
2  24  B   VBS-7 Match
3  54  A   XCA-1 Not Match
4  48  A   XCA-1 Not Match
5  88  C   CXV-4 Match
6  87  B   VBS-7 Match
7  98  A   VBS-0 Not Match
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-14 10:08:22

我们可以使用data.table。按“MAX”分组后,获取“CH”作为逻辑向量的唯一数目,以填充“不匹配”、“匹配”,并将其分配给“ST2”以创建列

代码语言:javascript
复制
library(data.table)
setDT(df1)[, ST2 := c("Not Match", "Match")[(uniqueN(CH) == 1) + 1], MAX]
df1
#   ID Num MAX    CH       ST2
#1:  1  22   A XCA-1 Not Match
#2:  2  24   B VBS-1     Match
#3:  3  54   A XCA-1 Not Match
#4:  4  48   A XCA-1 Not Match
#5:  5  88   C CXV-1     Match
#6:  6  87   B VBS-1     Match
#7:  7  98   A VBS-0 Not Match
票数 1
EN

Stack Overflow用户

发布于 2018-02-14 09:54:59

如果我理解正确,你可以这样做:

代码语言:javascript
复制
transform(df, ST2 = ave(as.character(CH), MAX, FUN = function(x) 
                    if(length(unique(x)) == 1) "Match" else "Not Match" ))

#  ID Num MAX    CH        ST       ST2
#1  1  22   A XCA-1 Not Match Not Match
#2  2  24   B VBS-7     Match     Match
#3  3  54   A XCA-1 Not Match Not Match
#4  4  48   A XCA-1 Not Match Not Match
#5  5  88   C CXV-4     Match     Match
#6  6  87   B VBS-7     Match     Match
#7  7  98   A VBS-0 Not Match Not Match
票数 2
EN

Stack Overflow用户

发布于 2018-02-14 09:54:49

我相信您有一个类别( MAX列),对于MAX中的每个条目,您希望确定该类别是否具有列CH的唯一值。这一点没有反映在你目前发布的例子中,但似乎是你所说的。如果这是您想要的,那么可以很容易地使用group_by()策略来完成:

代码语言:javascript
复制
library(tidyverse)
df <- data.frame(ID  = 1:6, 
                  MAX = c("A", "B", "A", "A", "C", "B"), 
                  CH = c("A", "B", "A", "A", "C", "D"))

在这里,我创建了一个数据框架,当MAX == A或C时,CH的值总是相同的,但是当它等于B时,结果是:

代码语言:javascript
复制
df <- df %>% group_by(MAX) %>% 
             mutate(Match = ifelse(length(unique(CH))==1, "Match", "No Match"))
df

# A tibble: 6 x 4
# Groups:   MAX [3]
     ID MAX   CH    Match   
  <int> <fct> <fct> <chr>   
1     1 A     A     Match   
2     2 B     B     No Match
3     3 A     A     Match   
4     4 A     A     Match   
5     5 C     C     Match   
6     6 B     D     No Match
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48783651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档