Скажімо, у нас є такий фрейм даних:
> df
A B C
1 1 2 3
2 4 5 6
3 7 8 9
Ми можемо вибрати стовпець 'B' з його індексу:
> df[,2]
[1] 2 5 8
Чи є спосіб отримати індекс (2) з мітки стовпця ('B')?
Скажімо, у нас є такий фрейм даних:
> df
A B C
1 1 2 3
2 4 5 6
3 7 8 9
Ми можемо вибрати стовпець 'B' з його індексу:
> df[,2]
[1] 2 5 8
Чи є спосіб отримати індекс (2) з мітки стовпця ('B')?
Відповіді:
Ви можете отримати індекс через grep
і colnames
:
grep("B", colnames(df))
[1] 2
або використовувати
grep("^B$", colnames(df))
[1] 2
отримати лише стовпці з назвою "B" без тих, хто містить B, наприклад "ABC".
grep
те, як ви це описуєте.
Це зробить наступне:
which(colnames(df)=="B")
grep
також полягає в перевазі, а саме в тому, що вона використовує регулярні вирази (тому ви можете шукати будь-який шаблон у своїх іменах col). Щоб просто отримати назви col "B", використовуйте "^B$"
як шаблон у grep. ^ - це метасимвол для початку та $ для кінця рядка.
which
. Ви можете безпосередньо використовуватиdf[names(df)=="B"]
grep("^fBodyAcc-meanFreq\\()-Z$",colnames(df))
або також grep("^fBodyAcc-meanFreq\\(\\)-Z$",colnames(df))
.
Я хотів побачити всі індекси для імен col, оскільки мені потрібно було зробити складну перестановку стовпців , тому я надрукував colnames як фрейм даних. Назви рядків - це індекси.
as.data.frame(colnames(df))
1 A
2 B
3 C
cbind(names(df))
.
Виходячи з химерних вище:
Щоб отримати ВСІ індекси стовпців у df , я використовував:
which(!names(df)%in%c())
або зберігати у списку:
indexLst<-which(!names(df)%in%c())
Це, здається, ефективний спосіб перерахувати вари з номером стовпця:
cbind(names(df))
Вихід:
[,1]
[1,] "A"
[2,] "B"
[3,] "C"
Іноді мені подобається копіювати змінні з позицією у свій код, тому я використовую цю функцію:
varnums<- function(x) {w=as.data.frame(c(1:length(colnames(x))),
paste0('# ',colnames(x)))
names(w)= c("# Var/Pos")
w}
varnums(df)
Вихід:
# Var/Pos
# A 1
# B 2
# C 3
match("B", names(df))
Може працювати також, якщо у вас вектор імен.