получить уникальные элементы для данного идентификатора из нескольких столбцов в R - PullRequest
0 голосов
/ 14 октября 2018

Как получить уникальные элементы для данного идентификатора (foo) из нескольких столбцов в R

df <- data.frame(
  foo = c("x1","x1","y1","y1"),
  c1 = c("apple","orange","banana","apple"),
  c2 = c("banana","apple","pear","grape"),
  c3 = c("orange","apple","banana","grape")
)

df
#>    foo     c1     c2     c3
#> 1:  x1  apple banana orange
#> 2:  x1 orange  apple  apple
#> 3:  y1 banana   pear banana
#> 4:  y1  apple  grape  grape

Желаемый

#> x1 apple banana orange
#> y1 apple grape pear banana

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Вот еще один вариант base R с split

lapply(split(as.matrix(df[-1]), df$foo), unique)
#$x1
#[1] "apple"  "orange" "banana"

#$y1
#[1] "banana" "apple"  "pear"   "grape" 

Или с использованием tidyverse

library(tidyverse)
df %>% 
   group_by(foo) %>%
   nest(.key = out) %>%
   mutate(out = map(out, ~ sort(unique(unlist(.)))))
0 голосов
/ 14 октября 2018

Два метода:

by(df[2:4], df$foo, function(a) unique(unlist(a, use.names=FALSE)))
# df$foo: x1
# [1] apple  orange banana
# Levels: apple banana orange grape pear
# ------------------------------------------------------------ 
# df$foo: y1
# [1] banana apple  pear   grape 
# Levels: apple banana orange grape pear

Или

library(dplyr)
library(tidyr)
df %>% tidyr::gather(k, v, -foo) %>% distinct(foo, v) %>% arrange(foo, v)
# Warning: attributes are not identical across measure variables;
# they will be dropped
#   foo      v
# 1  x1  apple
# 2  x1 banana
# 3  x1 orange
# 4  y1  apple
# 5  y1 banana
# 6  y1  grape
# 7  y1   pear
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...