Повторяющиеся значения в одной строке в кадре данных - PullRequest
0 голосов
/ 25 октября 2018
df <- data.frame(label = c("a","b","c"),
                 val=c("x","b","c"),
                 val1=c("z","b","d"))

   label val val1
1     a   x    z
2     b   b    b
3     c   c    d

Я хочу узнать повторяющиеся значения в каждой строке.для 1-й строки дубликата для 2-й строки нет, «b» - для 3-й строки, «c» - для дубликата.Как найти этот дубликат в программировании на R.

Также мне нужно заменить дублирующие элементы значением NA.

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Вот несколько вариантов

Используя базовую R apply мы replace значения duplicated до NA для каждой строки

df[] <- t(apply(df, 1, function(x) replace(x, duplicated(x), NA)))

df
#  label  val val1
#1     a    x    z
#2     b <NA> <NA>
#3     c <NA>    d

Или другойальтернативное использование dplyr и tidyr состоит в том, чтобы сначала создать новый столбец, представляющий row_number() кадра данных, gather в длинном формате, group_by каждая строка, replace duplicated значение до NAи spread обратно в широкоформатный формат.

library(dplyr)
library(tidyr)

df %>%
  mutate(row = row_number()) %>%
  gather(key, value, -row) %>%
  group_by(row) %>%
  mutate(value = replace(value, duplicated(value), NA)) %>%
  spread(key, value) %>%
  ungroup %>%
  select(-row)

# A tibble: 3 x 3
#  label val   val1 
#  <chr> <chr> <chr>
#1 a     x     z    
#2 b     NA    NA   
#3 c     NA    d    
0 голосов
/ 25 октября 2018

Используя duplicated с apply

apply(df,1,duplicated)
      [,1]  [,2]  [,3]
[1,] FALSE FALSE FALSE
[2,] FALSE  TRUE  TRUE
[3,] FALSE  TRUE FALSE

И замените его на NA

df[t(apply(df,1,duplicated))]=NA
df
  label  val val1
1     a    x    z
2     b <NA> <NA>
3     c <NA>    d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...