从data.table中删除变量重复项

问题描述 投票:1回答:3

我有超过6k列的数据。每个结果都作为列,数据始终相同。

   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执行此操作?

r
3个回答
1
投票

试试这个:

 df[, unique(colnames(df))]

一个警告:它将删除所有具有重复名称的列。在您的情况下,即使两列具有相同的名称但内容不同,它也会删除Sex


1
投票

如果您有不同名称的重复列,则可以转置数据框,这样您就可以使用unique函数来解决问题。然后你将它转置回来并将其设置回数据帧(因为当你转置它时它会出现一个矩阵)。

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)

编辑:像markus指出的那样,如果你有多个类型的列,这可能不是一个好的选择,因为当t()将你的数据帧强制转换为矩阵时,它也会将你的所有变量强制转换为相同的类型。


1
投票

如果需要检查所有值的相等性,可以使用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']
© www.soinside.com 2019 - 2024. All rights reserved.