Извлечение с именами, когда имена повторяются

Я столкнулся с этим вызовом. Как извлечь, когда есть повторение в именах?

X <- 1:5
names(X) <- c(letters[1:4], "a")
X
a b c d a 
1 2 3 4 5
names(X)
[1] "a" "b" "c" "d" "a"

X["a"]
a 
1

2 ответа

Решение

Извлечь, когда есть повторение в names:

X[names(X) %in% "a"]
# a a 
# 1 5 

Почему R принимает повторяющиеся имена?

Обратите внимание, что names является универсальной функцией доступа. Вы можете установить names ни к чему, это действительно не должно быть уникальным.

Другие решения:

X[grepl("a", names(X))]
X[names(X) == "a"]

Также в целом лучше иметь уникальные имена, чтобы вы могли ссылаться на них без путаницы. Следующая команда сделает это за вас.

make.unique(names(X))
[1] "a"   "b"   "c"   "d"   "a.1"

Кстати, первое решение, которое я предложил выше, все равно выберет все столбцы, которые содержат a,

Другие вопросы по тегам