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