R 从data.table中删除重复的变量
我有超过6k列的数据。每个结果都有数据始终相同的列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
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,所有数字列都会变成字符或事实。嗯,这一点很好。这将需要重新设置列类型,这将是不好的。好的,但我没有提到,有一些列具有相同的名称,我想留下来包含核心数据。那么,如果我知道要删除的列的名称,我如何删除重复的列呢?这将使列具有相同的名称,除非它们具有相同的值。好的,但我没有提到,有一些具有相同名称的列包含核心数据。那么,如果我知道要删除的列的名称,如何删除重复项呢?这将使列具有相同的名称,除非它们具有相同的值。