我有超过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执行此操作?
试试这个:
df[, unique(colnames(df))]
一个警告:它将删除所有具有重复名称的列。在您的情况下,即使两列具有相同的名称但内容不同,它也会删除Sex
。
如果您有不同名称的重复列,则可以转置数据框,这样您就可以使用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()将你的数据帧强制转换为矩阵时,它也会将你的所有变量强制转换为相同的类型。
如果需要检查所有值的相等性,可以使用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']