我有一个数据框
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
答案 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()