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

时间:2019-04-24 20:18:04

标签: r

我有超过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做到这一点?

3 个答案:

答案 0 :(得分:1)

尝试一下:

 df[, unique(colnames(df))]

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

答案 1 :(得分: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()强制将数据帧转换为矩阵时,它也会将所有变量强制转换为同一类型。

答案 2 :(得分: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']