Проблемы с поиском уникальных ценностей - PullRequest
1 голос
/ 26 апреля 2020

У меня проблема с уникальной командой. Когда я запускаю уникальные для каждой переменной, у меня нет проблем, но когда я пытаюсь запустить более одной переменной, у меня возникают проблемы.

Это моя база данных:

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, но повторяется семь раз в M2).

Это мой код для более чем одной переменной:

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

Независимо от того, повторяются ли имена разное количество тим es в 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

1 Ответ

1 голос
/ 26 апреля 2020

Мы можем использовать 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
...