如何识别数据框中具有相同值的列?

时间:2019-02-20 07:45:44

标签: r duplicates

我有一个数据框

         A B C D E F
         1 2 3 3 4 1
         2 3 5 5 8 2
         6 4 9 9 0 6
         1 2 3 3 8 1

我想要具有相同值的列的名称。

首选输出:A,F,C,D

3 个答案:

答案 0 :(得分:2)

扩展@Ronak Shah的解决方案以生成OP首选输出:

df <- data.frame(A = c(1,2,6,1), B = c(2,3,4,2), C = c(3,5,9,3), D = c(3,5,9,3), E = c(4,8,0,8), F = c(1,2,6,1))
df <- df[, duplicated(t(df)) | duplicated(t(df), fromLast = TRUE)]
df <- df[order(df[1])]
names(df)
[1] "A" "F" "C" "D"

请注意,使用order()是为了重新排列df,以便names(df)返回首选输出。

答案 1 :(得分:1)

Template.userHome.events({ 'change [name="userRole"]': function (event) { let userId = event.target.dataset.id; let currentRole = event.target.value; console.log(userId, currentRole); ... } }) 适用于数据帧的每一行。我们可以对其进行转置以使其适用于每个列,并将其作为子集的名称。

duplicated

答案 2 :(得分:1)

您可以将names(df)[duplicated(t(df)) | duplicated(t(df), fromLast = TRUE)] #[1] "A" "C" "D" "F" 转换为data.frame并使用list

duplicated()

您也可以直接在names(df)[duplicated(as.list(df)) | duplicated(as.list(df), fromLast = TRUE)] # [1] "A" "C" "D" "F" duplicated.default()

data.frame

数据

names(df)[duplicated.default(df) | duplicated.default(df, fromLast = TRUE)]
# [1] "A" "C" "D" "F"

基准

df <- data.frame( A = c(1L, 2L, 6L, 1L), B = c(2L, 3L, 4L, 2L), C = c(3L, 5L, 9L, 3L), D = c(3L, 5L, 9L, 3L), E = c(4L, 8L, 0L, 8L), F = c(1L, 2L, 6L, 1L) ) 转换为列表(data.frame)比转置并转换为矩阵(as.list())更有效:

t()