Создание таблиц на основе уникальных и неуникальных значений в одном столбце - PullRequest
0 голосов
/ 21 декабря 2018

Учитывая CSV со следующей структурой,

id, postCode, someThing, someOtherThing
1,E3 4AX, cats, dogs
2,E3 4AX, elephants, sheep
3,E8 KAK, mice, rats
4,VH3 2K2, humans, whales

Я хочу создать две таблицы, основываясь на том, является ли значение в столбце postCode уникальным или нет.Значения других столбцов не имеют значения для меня, но они должны быть скопированы в новые таблицы.

Мои конечные данные должны выглядеть следующим образом: одна таблица основана на уникальных postCode s:

id, postCode, someThing, someOtherThing
3,E8 KAK, mice, rats
4,VH3 2K2, humans, whales

, а другая - где дублируются postCode значения

id, postCode, someThing, someOtherThing    
1,E3 4AX, cats, dogs
2,E3 4AX, elephants, sheep

Пока я могу загрузить данные, но я не уверен в следующем шаге:

myData <- read.csv("path/to/my.csv",
  header=TRUE,
  sep=",",
  stringsAsFactors=FALSE
)

Новичок в R, поэтому помощь приветствуется.

Данные в формате dput.

df <-
structure(list(id = 1:4, postCode = structure(c(1L, 1L, 2L, 3L
), .Label = c("E3 4AX", "E8 KAK", "VH3 2K2"), class = "factor"), 
someThing = structure(c(1L, 2L, 4L, 3L), .Label = c(" cats", 
" elephants", " humans", " mice"), class = "factor"), 
someOtherThing = structure(c(1L, 3L, 2L, 4L), 
.Label = c(" dogs", " rats", " sheep", " whales               "
), class = "factor")), class = "data.frame", 
row.names = c(NA, -4L))

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Если вы можете сделать со списком двух data.frames, который кажется лучше, чем иметь много связанных объектов в .GlobalEnv, попробуйте split.

f <- rev(cumsum(rev(duplicated(df$postCode))))
split(df, f)
#$`0`
#  id postCode someThing         someOtherThing
#3  3   E8 KAK      mice                   rats
#4  4  VH3 2K2    humans  whales               
#
#$`1`
#  id postCode  someThing someOtherThing
#1  1   E3 4AX       cats           dogs
#2  2   E3 4AX  elephants          sheep
0 голосов
/ 21 декабря 2018

Если df - это имя вашего data.frame, которое может быть сформировано как:

df <- read.table(header = T, text = "
id, postCode, someThing, someOtherThing
1, E3 4AX, cats, dogs
2, E3 4AX, elephants, sheep
3, E8 KAK, mice, rats
4, VH3 2K2, humans, whales
       ")

Тогда уникальные и дубликаты можно найти с помощью функции n(), которая собирает количество наблюденийза grouped variable.Затем

uniques = df %>%
  group_by(postCode) %>%
  filter(n() == 1)

dupes = df %>%
  group_by(postCode) %>%
  filter(n() > 1)

Непонятно, почему кто-то отредактировал этот ответ.Может быть, они ненавидят tribbles

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...