0
我有一個數據集與「流派」,通常有多個類型拆分「|」。例如:按「|」分割列
Movie Genre
M1 Comedy|Drama
M2 Romance|Drama|Sci-fi
我想這些類型爲二進制列分離,使得流派列變成多列像這樣:
Movie Comedy Drama Romance Sci-fi
M1 1 1 0 0
M2 0 1 0 1
我有一個數據集與「流派」,通常有多個類型拆分「|」。例如:按「|」分割列
Movie Genre
M1 Comedy|Drama
M2 Romance|Drama|Sci-fi
我想這些類型爲二進制列分離,使得流派列變成多列像這樣:
Movie Comedy Drama Romance Sci-fi
M1 1 1 0 0
M2 0 1 0 1
可以使用strsplit
拆分類型列,但可以肯定的雙重轉義特殊字符「|」。例如:
dat <- data.frame(Movie = c("M1", "M2"),
Genre = c("Comedy|Drama", "Romance|Drama|Sci-fi"),
stringsAsFactors = FALSE)
genre_list <- strsplit(dat$Genre, split = "\\|")
unique_genres <- unique(unlist(genre_list, use.names = FALSE))
binary_genres <- t(sapply(genre_list, function(e) unique_genres %in% e))
mode(binary_genres) <- "integer"
colnames(binary_genres) <- unique_genres
out <- cbind(dat[1], binary_genres)
out
這給出了結果作爲與二元響應變量
Movie Comedy Drama Romance Sci-fi
M1 1 1 0 0
M2 0 1 1 1
的數據幀還可以使用tidyr
包嘗試separate_rows
由|
和spread
數據幀:
library(tidyr)
df %>%
separate_rows(Genre, sep = "[|]") %>%
mutate(Value = 1) %>%
spread(Genre, Value) %>%
mutate_at(vars(2:5), funs(coalesce(., 0)))
這給出:
Movie Comedy Drama Romance Sci-fi
1 M1 1 1 0 0
2 M2 0 1 1 1
你想完成什麼語言? – user1357015
這是一個兩步過程。首先[通過|拆分列](https://stackoverflow.com/questions/7069076/split-column-at-delimiter-in-data-frame),然後[將其轉換爲布爾矩陣](https:// stackoverflow.com/questions/22566592/convert-a-dataframe-to-presence-absence-matrix)。 –
我想在R中完成 –