我有一个数据集(df
),如下所示:
val1 val2 val3
1 ST 1.2 6.59 0.72 0 ST 1.2 6.59 0.72 0 PEACH 1.05 6.62 0.49 0
2 PEACH 1.05 6.62 0.49 0 ST 1.2 6.59 0.72 0 PEACH 1.05 6.62 0.49 0
3 ST 1.2 6.59 0.72 0 ST 1.2 6.59 0.72 0 PEACH 1.05 6.62 0.49 0
val4 val5
1 VANI 1.06 16.57 1.019 0 BB 1.0 6.75 0.45 0
2 VANI 1.06 16.57 1.019 0 BB 1.0 6.75 0.45 0
3 VANI 1.06 16.57 1.019 0 BB 1.0 6.75 0.45 0
每行包含五个字符串,其中两个将重复(每个重复列可能不同),我想删除每一行的重复列。
我尝试了unique(df[1,])
或duplicated(dt[1,])
,但他们一直表示没有重复的值。
我使用df[1,1] == df[1,2]
进行了检查,这显示为true,所以我不知道为什么唯一和重复在这里不起作用。
答案 0 :(得分:1)
df <- data.frame(x=c(1,2,1,1), y=c(1,4:5,1), z=c(1,7:8,1), w=c(1,2,1,1), t=c(3,4,5,3))
df
# x y z w t
# 1 1 1 1 1 3
# 2 2 4 7 2 4
# 3 1 5 8 1 5
# 4 1 1 1 1 3
如果您注意到第1行和第4行相同(1 1 1 1 3)。第1列和第4列也是相同的(1 2 1 1)。
duplicated
可以找到两种类型:
duplicated(df)
[1] FALSE FALSE FALSE TRUE
该函数逐行进行并返回重复的逻辑,并在最后找到一个。
对于您正在尝试的列搜索,它最初似乎不起作用:
duplicated(df, MARGIN=2)
[1] FALSE FALSE FALSE TRUE
这不是预期的。它做了完全相同的事情,逐行搜索。我标记了列,但我仍然提供了data.frame
。 MARGIN
参数被忽略。但如果我提供一个矩阵,它可以工作:
duplicated(as.matrix(df), MARGIN=2)
[1] FALSE FALSE FALSE TRUE FALSE
这是有效的,逐列搜索。我也可以强制函数的矩阵方法:
duplicated.matrix(df, MARGIN=2)
[1] FALSE FALSE FALSE TRUE FALSE