Предполагая, что пустые элементы пустые строки символов (т.е. они не содержат пробелов), вы можете сначала заменить эти элементы с NA
и затем используйте пакет reshape2, чтобы изменить данные.
is.na(df) <- df == ""
library(reshape2)
dcast(melt(df, 1, na.rm = TRUE), id ~ value, length)
# id action comedy romance
# 1 1 1 1 1
# 2 2 0 1 1
# 3 3 0 0 1
Или один вкладыш для удовольствия, оставляя исходные данные без изменений.
dcast(melt(replace(df, df == "", NA), 1, na.rm = TRUE), id ~ value, length)
# id action comedy romance
# 1 1 1 1 1
# 2 2 0 1 1
# 3 3 0 0 1
Оригинальные данных:
df <- structure(list(id = 1:3, genre1 = c("action", "comedy", "romance"
), genre2 = c("comedy", "romance", ""), genre3 = c("romance",
"", "")), .Names = c("id", "genre1", "genre2", "genre3"), class = "data.frame", row.names = c(NA,
-3L))