Вы можете использовать data.table
library(data.table)
setDT(df1)[, unlist(strsplit(content, split = " ")), by = ID
][, dcast(.SD, ID ~ V1)]
# ID are hello how ok test you
#1: 1 2 1 1 1 0 3
#2: 2 0 0 0 0 1 0
В первой части мы используем unlist(strsplit(content, split = " "))
группами ID
, что дает следующий вывод:
# ID V1
#1: 1 hello
#2: 1 you
#3: 1 how
#4: 1 are
#5: 1 you
#6: 1 you
#7: 1 are
#8: 1 ok
#9: 2 test
На следующем шаге мы используем dcast
для распространения данных в широкоформатный формат.
data
df1 <- structure(list(ID = c(1L, 1L, 2L), content = c("hello you how are you",
"you are ok", "test")), .Names = c("ID", "content"), class = "data.frame", row.names = c(NA,
-3L))