2016-12-23 3 views
0

Представьте себе очень простой файл CSV, который выглядит следующим образом:Теги столбца фиктивных столбцов

output,input,tags 
0,0,sunday-hot 
1,3,sunday 
5,1,hot-random 

где колонка тегов состоит из ряда ключевых слов всех разделенный «-».
То, что я хотел бы, чтобы превратить его в набор данных, который выглядит следующим образом:

output,input,sunday,hot,random 
0,0,T,T,F 
1,3,T,F,F 
5,1,F,T,T 

ответ

1

Вот один из способов сделать это с помощью dplyr/tidyr. Используйте separate_rows() для разделения вставленных тегов на обычный столбец, который содержит одно значение в каждой ячейке; Создать значение column, который содержит все TRUE для распространения; Заполните недостающие значения с FALSE:

library(dplyr); library(tidyr) 

df %>% separate_rows(tags) %>% 
     mutate(val = TRUE) %>% 
     spread(tags, val, fill = FALSE) 

# output input hot random sunday 
#1  0  0 TRUE FALSE TRUE 
#2  1  3 FALSE FALSE TRUE 
#3  5  1 TRUE TRUE FALSE 
1

так, как вы хотите хранить данные не эффективны на всех, потому что вы будете создавать безумную количество столбцов, значения будут отсутствовать большую часть времени.

Вместо этого взгляните на https://github.com/juliasilge/tidytext и функцию unnest_tokens.

3

Мы можем сделать это с помощью одной гильзы с помощью mtabulate

library(qdapTools) 
cbind(df1[-3], mtabulate(strsplit(df1$tags, "-"))!=0) 
# output input hot random sunday 
#1  0  0 TRUE FALSE TRUE 
#2  1  3 FALSE FALSE TRUE 
#3  5  1 TRUE TRUE FALSE 

ПРИМЕЧАНИЯ: Если в столбце «метка» является factor класса, оберните его as.character как strsplit занимает всего character класс в качестве входных данных

+1

Не знаю, об этой библиотеке. спасибо – CarrKnight

Смежные вопросы