У меня есть столбец списков в фрейме данных. Я пытаюсь разбить список на переменные в наборе данных.Разделить список в кадре данных как двоичные переменные в R
Например, у меня есть набор данных, столбцы которой подобны
V1 <- c(1,2,3,4,5)
V2 <- c(1,2,3,4,5)
V3 <- c(1,2,3,4,5)
V4 <- list(list("a","b","c"),
list("a","b","d"),
list("b","c","d"),
list("a","b","e"),
list("b","c","e"))
V5 <- c(1,2,3,4,5)
sample<-NA
sample <- data.frame(V1,V2,V3,I(V4),V5)
В этом, v4
содержит столбец списков
После разделения списка, желаемый кадр данных должен быть, как показано ниже
> sample
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 1 1 a, b, c 1 1 1 1 0 0
2 2 2 2 a, b, d 2 1 1 0 0 1
3 3 3 3 b, c, d 3 0 1 1 1 0
4 4 4 4 a, b, e 4 1 1 0 0 1
5 5 5 5 b, c, e 5 0 1 1 0 1
данные в новой переменной, созданной, должны быть 1 или 0, если они доступны в соответствующем списке.
Вот мой подход к тому, чтобы сделать то же самое. Сначала я определил все уникальные элементы списка и создал соответствующие столбцы с NA, а затем попытался проверить, есть ли конкретная переменная в списке, тогда ему назначается 1 else 0.
features <- c("a","b","c","d","e")
l <-1
for(j in 1:length(sample$V4)){
for(k in 6:10){
for(i in features){
if(i %in% tolower(unlist(sample$V4[[j]]))){
sample[j,k] <-1
print(sample[j,k])
}else{
sample[j,k] <-0
}
print(c(l,k,i,j))
l <- l+1
}
}
}
Я не знаю, где это происходит неправильно, это дает результат, как показано ниже
> sample
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 1 1 1 a, b, c 1 0 0 0 0 0
2 2 2 2 a, b, d 2 0 0 0 0 0
3 3 3 3 b, c, d 3 0 0 0 0 0
4 4 4 4 a, b, e 4 1 1 1 1 1
5 5 5 5 b, c, e 5 1 1 1 1 1
Пожалуйста, покажите небольшой воспроизводимый пример и ожидаемый результат для других, чтобы отладить вашу проблему. – akrun
@akrun Спасибо! отредактированный с помощью воспроизводимого кода. –
Неясно, как вы получили эти значения 1 в ожидаемом выходе, когда элементы отсутствуют. Например, 'b, c, e 5 0 0 0 1 1' – akrun