Функция, которая передает значение ключа и возвращает список имен из фрейма данных, R? - PullRequest
1 голос
/ 05 мая 2020

Я немного устарел, работая с R, и я больше знаком с pandas, но я не могу представить, как синтаксис этого go будет. Есть ли способ создать функцию, которая передает значение ключа во фрейм данных и возвращает список имен, связанных с этим значением ключа?

Что-то похожее ...

#Example df Data
Name    JobID
Ted     1
Bill    1
Frank   2
Ox      3

FindName <- function(x){
  value = df.loc[(df['JobID'] == x), 'Name']
  outList = value.iloc[0]
  return outList

NameList <- FindName(df$JobID)

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

Вот пример, который использует mtcars, встроенный в набор данных, для возврата элементов вектора / столбца x (для вас это будет Name), где элементы в векторе / столбце y (для вас это будет JobID) соответствует значению v (для вас это будет 1).

findName <- function(x, y, v) {
  x[y == v]
}

findName(rownames(mtcars), mtcars$cyl, 4)

Реальность такова, что вам действительно не нужно делать это как функцию, это будет ненужный. Было бы меньше работы просто писать напрямую по мере необходимости df$Name[df$JobID == 1]. Используя ваши данные, приведенные выше решения возвращают:

> findName(df1$Name, df1$JobID, 1)
[1] Ted  Bill
Levels: Bill Frank Ox Ted
> df1$Name[df1$JobID == 1]
[1] Ted  Bill
Levels: Bill Frank Ox Ted

Они работают так: они выполняют линейный поиск , чтобы вернуть логический вектор (TRUE / FALSE ; посмотрим, что произойдет, если вы выполните только df$JobID == 1), а затем передадите этот логический вектор для подмножества вектора Name в те, у которых логический вектор равен TRUE.

0 голосов
/ 05 мая 2020

Вы можете использовать filter, чтобы выбрать данные для c JobID и извлечь уникальный Name.

library(dplyr)

FindName <- function(data, id) {
   data %>% filter(JobID == id) %>% pull(Name) %>% unique
}

FindName(df, 1)
#[1] "Ted"  "Bill"

FindName(df, 3)
#[1] "Ox"
...