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

R 从data.table中删除重复的变量,r,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 N

我有超过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。

尝试以下操作:

 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将数据帧强制为矩阵时,它也会将所有变量强制为同一类型。

如果列的名称不同,则可以转置数据帧,它允许您使用独特的功能来解决您的问题。然后你把它调回原处,并把它设置回数据帧,因为当你调换它时,它是一个矩阵

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']
如果需要检查所有值是否相等,可以使用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']

这可能会产生副作用,即在OP的情况下,由于列XCODE,所有数字列都会变成字符或事实。嗯,这一点很好。这将需要重新设置列类型,这将是不好的。这可能会产生副作用,即在OP的情况下,由于列XCODE,所有数字列都会变成字符或事实。嗯,这一点很好。这将需要重新设置列类型,这将是不好的。好的,但我没有提到,有一些列具有相同的名称,我想留下来包含核心数据。那么,如果我知道要删除的列的名称,我如何删除重复的列呢?这将使列具有相同的名称,除非它们具有相同的值。好的,但我没有提到,有一些具有相同名称的列包含核心数据。那么,如果我知道要删除的列的名称,如何删除重复项呢?这将使列具有相同的名称,除非它们具有相同的值。