Удалить дубликаты переменных из data.table - PullRequest
1 голос
/ 24 апреля 2019

У меня есть данные с более чем 6 тыс. Столбцов. Каждый результат имеет столбцы с данными, которые всегда одинаковы.

   XCODE Age Sex ResultA Sex ResultB
1   X001  12   2       2       2       4
2   X002  23   2       4       2      66
3   X003  NA  NA      NA      NA      NA
4   X004  32   1       1       1       3
5   X005  NA  NA      NA      NA      NA
6   X001  NA  NA      NA      NA      NA
7   X002  NA  NA      NA      NA      NA
8   X003  33   1       8       1       6
9   X004  NA  NA      NA      NA      NA
10  X005  55   2       8       2       8

Я хотел бы удалить дубликат, например, переменную пола. Есть ли возможность сделать это с data.table?

Ответы [ 3 ]

1 голос
/ 24 апреля 2019

Если у вас есть дублированные столбцы с разными именами, вы можете транспонировать свой фрейм данных, что позволяет использовать функцию unique для решения вашей проблемы.Затем вы перемещаете его обратно и устанавливаете обратно в dataframe (потому что он был матричным, когда вы его транспонировали).

df = data.frame(c = 1:5, a = c("A", "B","C","D","E"), b = 1:5)

df = t(df)
df = unique(df)
df = t(df)
df = data.frame(df)

Редактировать: как указывает Маркус, это, вероятно, не очень хороший вариант, если у вас естьстолбцы с типами, кратными типам, потому что когда t () приводит ваш кадр данных к матрице, он также приводит все ваши переменные к одному и тому же типу.

1 голос
/ 24 апреля 2019

Вы можете использовать match, если вам нужно проверить равенство всех значений.

df[, unique(match(df, df)), with = F]

df2
#    XCODE Age Sex ResultA ResultB
# 1   X001  12   2       2       4
# 2   X002  23   2       4      66
# 3   X003  NA  NA      NA      NA
# 4   X004  32   1       1       3
# 5   X005  NA  NA      NA      NA
# 6   X001  NA  NA      NA      NA
# 7   X002  NA  NA      NA      NA
# 8   X003  33   1       8       6
# 9   X004  NA  NA      NA      NA
# 10  X005  55   2       8       8

Использованные данные:

df <- fread('
   XCODE Age Sex ResultA Sex ResultB
1   X001  12   2       2       2       4
2   X002  23   2       4       2      66
3   X003  NA  NA      NA      NA      NA
4   X004  32   1       1       1       3
5   X005  NA  NA      NA      NA      NA
6   X001  NA  NA      NA      NA      NA
7   X002  NA  NA      NA      NA      NA
8   X003  33   1       8       1       6
9   X004  NA  NA      NA      NA      NA
10  X005  55   2       8       2       8
')[, -'V1']
1 голос
/ 24 апреля 2019

Попробуйте это:

 df[, unique(colnames(df))]

Одно предупреждение: будут удалены все столбцы с дублированными именами. В вашем случае он удалит Sex, даже если два столбца имеют одинаковое имя, но разное содержимое.

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