R - Фильтровать повторяющиеся строки в большом фрейме данных - PullRequest
0 голосов
/ 09 мая 2018

У меня есть фрейм данных с 500k строк и около 130 столбцов. Я хочу отфильтровать повторяющиеся строки для всех столбцов, кроме одного (столбец 128). Я попробовал:

df <- unique(df[,-128])

df <- df[!duplicated(df[, -128])]

df <- distinct(df, -column128)

Я получаю одну и ту же ошибку снова и снова:

Error in paste(...............,  : formal argument "sep" matched by multiple actual arguments

Я также пытался напечатать каждый столбец, но получил ту же ошибку. Если я попробую выше для первых 9 столбцов, ошибка не появится. Однако, если я попробую то же самое для 10 столбцов, я получу ошибку. Есть ли ограничение на количество столбцов для удаления дублированных строк? Или есть у кого решение?

df выглядит следующим образом (столбец 128 = метка):

    data.frame':    571262 obs. of  139 variables:
 $ x                      : num  1 1 1 1 0 0 0 7 7 7 ...
 $ jan                    : num  0 0 0 0 0 0 0 0 0 0 ...
 $ feb                    : num  0 0 0 0 0 0 0 0 0 0 ...
 $ mrt                    : num  0 0 0 0 0 0 0 0 0 0 ...
 $ apr                    : num  0 0 0 0 0 0 0 0 0 0 ...
 $ mei                    : num  0 0 0 0 0 0 0 0 0 0 ...
 $ jun                    : num  0 0 0 0 0 0 0 0 0 0 ...
 $ jul                    : num  0 0 0 0 0 0 0 0 0 0 ...
 $ aug                    : num  1 1 0 0 0 0 0 0 0 0 ...
 $ sep                    : num  0 0 1 1 0 0 0 0 0 0 ...
 $ okt                    : num  0 0 0 0 1 1 1 0 0 0 ...
 $ nov                    : num  0 0 0 0 0 0 0 1 1 1 ...
 $ dec                    : num  0 0 0 0 0 0 0 0 0 0 ...
 $ - 1                    : num  0 0 1 1 1 ...
 $ - 2                    : num  0 0 0 0 1 ...
 $ - 3                    : num  0 0 0 0 0 ...
 $ - 4                    : num  0 0 0 0 0 0 0 0 0 0 ...
......
 $ - 114                  : num  0 0 0 0 0 0 0 0 0 0 ...
 $ label                  : int  8 12 8 12 8 10 12 8 10 12 ...
 $ 2008                   : num  0 0 0 0 0 0 0 0 0 0 ...
 $ 2009                   : num  0 0 0 0 0 0 0 0 0 0 ...
 $ 2010                   : num  0 0 0 0 0 0 0 0 0 0 ...
 $ 2011                   : num  0 0 0 0 0 0 0 0 0 0 ...
 $ 2012                   : num  0 0 0 0 0 0 0 0 0 0 ...
 $ 2013                   : num  0 0 0 0 0 0 0 0 0 0 ...
 $ 2014                   : num  0 0 0 0 0 0 0 0 0 0 ...
 $ 2015                   : num  0 0 0 0 0 0 0 0 0 0 ...
 $ 2016                   : num  1 1 1 1 1 1 1 1 1 1 ...
 $ 2017                   : num  0 0 0 0 0 0 0 0 0 0 ...
 $ 2018                   : num  0 0 0 0 0 0 0 0 0 0 ...

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Похоже, что один из столбцов вашего месяца 'sep' сталкивается с аргументом paste(..., sep).Ошибка говорит вам 'формальный аргумент "sep", соответствующий нескольким фактическим аргументам ".

Вряд ли у вас есть 2+ столбца с именем' sep ': check which(names(df)=='sep')

Обходной путь - переименовать ваш столбец в «sep», например, в «spt»

0 голосов
/ 09 мая 2018

Вы можете попробовать решение tidyverse, используя функцию filter_at.

library(tidyverse)
set.seed(14)
df <- data.frame(a=sample(1:4, 5, T),b=sample(1:4, 5, T), d=1:5) 
df
  a b d
1 2 3 1
2 3 4 2
3 4 2 3
4 3 2 4
5 4 2 5
df %>% filter_at(vars(-3), all_vars(!duplicated(.)))
  a b d
1 2 3 1
2 3 4 2
3 4 2 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...