Удалите NA и дубликаты в столбце фрейма данных, разделенном строками "\ n" - PullRequest
0 голосов
/ 27 мая 2020

У меня есть столбец в моих данных, который выглядит так:

# A tibble: 10 x 1
   ID_col                                                          
   <chr>                                                           
 1 "1020\nNA\nNA\n1020\nNA\nNA\nNA\nNA\nNA\n1020\n1020\n1020\n1020"
 2 "1651\nNA\nNA\nNA\n1651\nNA\nNA\nNA\n1651\nNA\n1651\nNA\nNA"    
 3 "1598\nNA\nNA\nNA\n1598\nNA\nNA\nNA\n1598\nNA\n1598\nNA\nNA"    
 4 "1141\nNA\nNA\n1141\nNA\nNA\nNA\nNA\nNA\n1141\n1141\n1141\n1141"

Я хочу удалить все значения NA и все повторяющиеся значения. (Сохраните только одно появление дублированного значения)

Ожидаемый результат для 4 выше будет:

# A tibble: 10 x 1
   ID_col                                                          
   <chr>                                                           
 1 "1020"
 2 "1651"    
 3 "1598"    
 4 "1141"

Данные:

structure(list(ID_col = c("1020\nNA\nNA\n1020\nNA\nNA\nNA\nNA\nNA\n1020\n1020\n1020\n1020", 
"1651\nNA\nNA\nNA\n1651\nNA\nNA\nNA\n1651\nNA\n1651\nNA\nNA", 
"1598\nNA\nNA\nNA\n1598\nNA\nNA\nNA\n1598\nNA\n1598\nNA\nNA", 
"1141\nNA\nNA\n1141\nNA\nNA\nNA\nNA\nNA\n1141\n1141\n1141\n1141", 
"NA\n835\n835\n835\nNA\nNA\nNA\nNA\n835\n835\nNA\n835\n835", 
"1553\nNA\nNA\n1553\nNA\nNA\nNA\nNA\nNA\n1553\n1553\nNA\nNA", 
"1542\nNA\nNA\nNA\nNA\nNA\nNA\nNA\nNA\nNA\n1542\nNA\nNA", "NA\nNA\nNA\n1157\nNA\nNA\nNA\nNA\nNA\n1157\nNA\n1157\n1157", 
"NA\nNA\nNA\nNA\nNA\nNA\nNA\nNA\n1498\nNA\nNA\nNA\nNA", "NA\n958\n958\nNA\nNA\n958\nNA\nNA\nNA\nNA\nNA\nNA\nNA"
)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"
))

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Я бы использовал str_extract вот так,

library(tidyverse)

df_example <- structure(list(ID_col = c("1020\nNA\nNA\n1020\nNA\nNA\nNA\nNA\nNA\n1020\n1020\n1020\n1020", 
                          "1651\nNA\nNA\nNA\n1651\nNA\nNA\nNA\n1651\nNA\n1651\nNA\nNA", 
                          "1598\nNA\nNA\nNA\n1598\nNA\nNA\nNA\n1598\nNA\n1598\nNA\nNA", 
                          "1141\nNA\nNA\n1141\nNA\nNA\nNA\nNA\nNA\n1141\n1141\n1141\n1141", 
                          "NA\n835\n835\n835\nNA\nNA\nNA\nNA\n835\n835\nNA\n835\n835", 
                          "1553\nNA\nNA\n1553\nNA\nNA\nNA\nNA\nNA\n1553\n1553\nNA\nNA", 
                          "1542\nNA\nNA\nNA\nNA\nNA\nNA\nNA\nNA\nNA\n1542\nNA\nNA", "NA\nNA\nNA\n1157\nNA\nNA\nNA\nNA\nNA\n1157\nNA\n1157\n1157", 
                          "NA\nNA\nNA\nNA\nNA\nNA\nNA\nNA\n1498\nNA\nNA\nNA\nNA", "NA\n958\n958\nNA\nNA\n958\nNA\nNA\nNA\nNA\nNA\nNA\nNA"
)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame"
))


df_example %>% 
  mutate(ID_col = str_extract(ID_col,"[:digit:]+"))

Если вам нужно несколько значений

df_example %>% 
  mutate(ID_col = str_extract_all(ID_col,"[:digit:]+"))
1 голос
/ 27 мая 2020

Используйте str_extract:

library(stringr)
df$ID_col <- str_extract(df$ID_col, "\\d+")
    df
   ID_col
1    1020
2    1651
3    1598
4    1141
5     835
6    1553
7    1542
8    1157
9    1498
10    958

Данные:

df <- data.frame(ID_col = c("1020\nNA\nNA\n1020\nNA\nNA\nNA\nNA\nNA\n1020\n1020\n1020\n1020", 
                                "1651\nNA\nNA\nNA\n1651\nNA\nNA\nNA\n1651\nNA\n1651\nNA\nNA", 
                                "1598\nNA\nNA\nNA\n1598\nNA\nNA\nNA\n1598\nNA\n1598\nNA\nNA", 
                                "1141\nNA\nNA\n1141\nNA\nNA\nNA\nNA\nNA\n1141\n1141\n1141\n1141", 
                                "NA\n835\n835\n835\nNA\nNA\nNA\nNA\n835\n835\nNA\n835\n835", 
                                "1553\nNA\nNA\n1553\nNA\nNA\nNA\nNA\nNA\n1553\n1553\nNA\nNA", 
                                "1542\nNA\nNA\nNA\nNA\nNA\nNA\nNA\nNA\nNA\n1542\nNA\nNA", 
                                "NA\nNA\nNA\n1157\nNA\nNA\nNA\nNA\nNA\n1157\nNA\n1157\n1157", 
                                "NA\nNA\nNA\nNA\nNA\nNA\nNA\nNA\n1498\nNA\nNA\nNA\nNA", 
                                "NA\n958\n958\nNA\nNA\n958\nNA\nNA\nNA\nNA\nNA\nNA\nNA"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...