【问题标题】:Trouble finding unique values无法找到唯一值
【发布时间】:2020-04-26 20:20:05
【问题描述】:

我对唯一命令有疑问。当我为每个变量运行唯一时,我没有问题,但是当我尝试为多个变量运行时,我遇到了麻烦。

这是我的数据库:

structure(list(M1 = c("AMZN PE Equity", "ANDAHUC1 PE", "ANDAHUC1 PE", 
"ANDAHUC1 PE", "ANDAHUC1 PE", "ANDAHUC1 PE", "ANDAHUC1 PE", "ALICPRLl1 Pe Equity", 
"ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity", 
"ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity"), M2 = c("AMZN PE Equity", 
"ANDAHUC1 PE", "ANDAHUC1 PE", "ANDAHUC1 PE", "ANDAHUC1 PE", "ANDAHUC1 PE", 
"ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity", 
"ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity", 
"ALICPRLl1 Pe Equity")), row.names = c(NA, 13L), class = "data.frame")

两个变量(M1,M2)具有相同的特征,但以不同的比例重复(ALICPRLl1 Pe Equity 在 M1 中重复了 6 次,但在 M2 中重复了 7 次)。

这是我的多个变量的代码:

morethan1<- unique(testrep[c("M1", "M2")])

这是我的输出:

      M1                       M2
1      AMZN PE Equity        AMZN PE Equity
2        ANDAHUC1 PE        ANDAHUC1 PE
7         ANDAHUC1 PE       ALICPRLl1 Pe Equity
8 ALICPRLl1 Pe Equity       ALICPRLl1 Pe Equity

如您所见,还有一些重复的名称。

这是我的一个变量的代码:

just1 <- unique(testrep[c("M1")])

在这种情况下我没有问题:

         M1
1      AMZN PE Equity
2         ANDAHUC1 PE
8 ALICPRLl1 Pe Equity

我还有数字 (1 , 2 , 8),我希望数字按顺序显示 (1 ,2 3)

最后,如果我有 100 列(M1 到 M100),我该如何修改我的第一个代码(M1:M00)?

另一种方式:

bothvariables <- subset(unique(testrep), M1 != M2)

这是我的输出:

         M1                           M2
7 ANDAHUC1 PE               ALICPRLl1 Pe Equity

但我想要这个输出:

         M1                            M2
      AMZN PE Equity             AMZN PE Equity
         ANDAHUC1 PE             ANDAHUC1 PE
 ALICPRLl1 Pe Equity             ALICPRLl1 Pe Equity

无论名称是否在 M1、M2 中重复不同的次数,我都想要一个输出来显示 M1 和 M2 列中的唯一名称。

现在我尝试再添加一列:M3

这是我的新数据库:

structure(list(M1 = c("AMZN PE Equity", "ANDAHUC1 PE", "ANDAHUC1 PE", 
"ANDAHUC1 PE", "ANDAHUC1 PE", "ANDAHUC1 PE", "ANDAHUC1 PE", "ALICPRLl1 Pe Equity", 
"ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity", 
"ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity"), M2 = c("AMZN PE Equity", 
"ANDAHUC1 PE", "ANDAHUC1 PE", "ANDAHUC1 PE", "ANDAHUC1 PE", "ANDAHUC1 PE", 
"ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity", 
"ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity", 
"ALICPRLl1 Pe Equity"), M3 = c("AMZN PE Equity", "AMZN PE Equity", 
"AMZN PE Equity", "ANDAHUC1 PE", "ANDAHUC1 PE", "ANDAHUC1 PE", 
"ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity", 
"ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity", "ALICPRLl1 Pe Equity", 
"ALICPRLl1 Pe Equity")), row.names = c(NA, 13L), class = "data.frame")

这是代码:

testrep %>%
    distinct(M1, .keep_all = TRUE)

This is the output:

                   M1                  M2                  M3
1      AMZN PE Equity      AMZN PE Equity      AMZN PE Equity
2         ANDAHUC1 PE         ANDAHUC1 PE      AMZN PE Equity
3 ALICPRLl1 Pe Equity ALICPRLl1 Pe Equity ALICPRLl1 Pe Equity

我现在也有同样的问题,只是因为我添加了一个新列。

这是我的预期输出:

               M1                M2                  M3
1      AMZN PE Equity      AMZN PE Equity      AMZN PE Equity
2         ANDAHUC1 PE         ANDAHUC1 PE      ANDAHUC1 PE  
3 ALICPRLl1 Pe Equity   ALICPRLl1 Pe Equity    ALICPRLl1 Pe Equity

【问题讨论】:

  • 有重复的名称,是的,但没有重复的名称。
  • @r2evans 我有相同数量的列和行,名称在每个变量中重复不同的时间,这就是问题所在。有没有办法获得像最后一个代码一样的输出,但对于两个变量(M1 和 M2)?

标签: r unique


【解决方案1】:

我们可以使用paste

 testrep[paste0("M", 1:100)]

startsWith

testrep[startsWith(names(testrep), "M")]

或使用grep

testrep[grep("^M\\d+$", names(testrep))]

关于行号问题,可以设置为NULL获取默认编号

row.names(just1) <- NULL

我们可以使用distinct.keep_all

library(dplyr)
testrep %>%
    distinct(M1, .keep_all = TRUE)
#                   M1                  M2
#1      AMZN PE Equity      AMZN PE Equity
#2         ANDAHUC1 PE         ANDAHUC1 PE
#3 ALICPRLl1 Pe Equity ALICPRLl1 Pe Equity

我们可以从那里得到unique。每列分别然后unnest

library(tidyr)
testrep2 %>%
     summarise_all(list(~ list(unique(.)))) %>%
     unnest(everything())
# A tibble: 3 x 3
#  M1                  M2                  M3                 
#  <chr>               <chr>               <chr>              
#1 AMZN PE Equity      AMZN PE Equity      AMZN PE Equity     
#2 ANDAHUC1 PE         ANDAHUC1 PE         ANDAHUC1 PE        
#3 ALICPRLl1 Pe Equity ALICPRLl1 Pe Equity ALICPRLl1 Pe Equity

【讨论】:

  • 谢谢,但我也有同样的问题,唯一的:还有一些重复的名字。
  • @JoseMontoya unique 对于多列检查行的组合是否跨列是唯一的。不清楚你想要什么。如果您只需要对特定列执行此操作,则可以这样做
  • 我想要一个像我上一个代码一样的输出,但不止一个变量。正如您所看到的,当我尝试对多个变量使用 unique 时,我会得到一些我不想要的重复名称。
  • 效果很好!谢谢你的耐心:)
  • 完美!它适用于所有列,这就是我想要的。谢谢! :)
猜你喜欢
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
相关资源
最近更新 更多