Задать имя объекта в фрейме данных - PullRequest
2 голосов
/ 08 апреля 2020

У меня очень простой вопрос, но я не могу найти легкого решения (не знаю почему)

Поэтому я хотел бы знать, как r может дать мне знать, в каком столбце находится объект. например, если мы возьмем набор данных радужной оболочки, я знаю, что где-то в нем должно быть «setosa», но мне бы хотелось, чтобы команда возвращала мне имя столбца («Species»).

Спасибо:)

Ответы [ 3 ]

2 голосов
/ 08 апреля 2020

Другая базовая опция R, по общему признанию, не быстрее, чем @ akrun's answer .

sapply(iris, function(x) 'setosa' %in% x)
# Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
#        FALSE        FALSE        FALSE        FALSE         TRUE 

names(iris)[sapply(iris, function(x) 'setosa' %in% x)]
# [1] "Species"
2 голосов
/ 08 апреля 2020

Мы можем использовать sapply до l oop поверх list проверки, если есть any 'setosa', и использовать ее для подстановки имен столбцов

names(iris)[sapply(iris, function(x) any(x == 'setosa'))]
#[1] "Species"

или используя select_if

library(dplyr)
iris %>% 
     select_if(~ any(. == 'setosa')) %>%
     names
#[1] "Species"

Может быть лучше иметь другое условие, чтобы проверять только нечисловые c столбцы

iris %>%
     select_if(~ is.factor(.) && any(. == 'setosa')) %>%
     names
0 голосов
/ 08 апреля 2020

Вот два основных варианта R.

Использование Filter:

names(Filter(function(x) any(x == 'setosa'), iris))
#[1] "Species"

Использование colSums:

names(iris)[colSums(iris == 'setosa') > 0]
#[1] "Species"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...