Добавление значений в другой список в r - PullRequest
1 голос
/ 14 июля 2020

У меня есть фрейм данных с названиями фруктов apple, orange и banana:

> fruits
  X.apple. X.orange. X.apple..1 X.banana. X.apple..2  X.orange..1 X.banana..1 
    apple    orange    apple    banana      apple    orange      banana

У меня также есть 3 списка: apples = c(), oranges = c() и bananas = c(). Это просто списки.

Теперь я хочу добавить значение 0/1 в список в соответствии с df. Например: список яблок станет: apple = (1,0,1,0,1,0,0), в котором 0 означает, что в этой позиции df нет яблока.

oranges = (0,1,0,0,0,1,0)

bananas = (0,0,0,1,0,0,1)

Действительно мой исходный фрейм данных содержит тысячи элементов и сотни списков. Как я могу сделать это быстро?

> dput(fruits)
structure(list(X.apple. = structure(1L, .Label = "apple", class = "factor"), 
    X.orange. = structure(1L, .Label = "orange", class = "factor"), 
    X.apple..1 = structure(1L, .Label = "apple", class = "factor"), 
    X.banana. = structure(1L, .Label = "banana", class = "factor"), 
    X.apple..2 = structure(1L, .Label = "apple", class = "factor"), 
    X.orange..1 = structure(1L, .Label = "orange", class = "factor"), 
    X.banana..1 = structure(1L, .Label = "banana", class = "factor")), class = "data.frame", row.names = c(NA, 
-1L))

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Мы могли бы сделать это за один шаг с помощью model.matrix

out <- asplit(model.matrix(~ unlist(fruits) -1), 2)
1 голос
/ 14 июля 2020

Вы можете извлечь уникальные значения фруктов и найти положение, в котором они находятся.

fruits <- unlist(fruits)
unique_fruits <- unique(fruits)
lapply(unique_fruits, function(x) +(fruits == x))

#[[1]]
#[1] 1 0 1 0 1 0 0

#[[2]]
#[1] 0 1 0 0 0 1 0

#[[3]]
#[1] 0 0 0 1 0 0 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...