Делая пример, предполагая, что ваши данные находятся в column_1 файла data.frame, следующие должны создать ваши n-граммы, используя базовую R:
# build original data as a data.frame with 1 column
df <- data.frame( column_1 =
c("Electronic, socket, clamp, cooler",
"Actuator, cylinder, valve",
"Hydraulic, electronic, cooler",
"Actuator, Pnematic, cylinder, valve"),
stringsAsFactors=FALSE)
lov <- strsplit(df$column_1, ', ', fixed=TRUE)
sapply(lov, function(x){paste0(x[ -length(x) ], '_', x[-1])})
Результат:
[[1]]
[1] "Electronic_socket" "socket_clamp" "clamp_cooler"
[[2]]
[1] "Actuator_cylinder" "cylinder_valve"
[[3]]
[1] "Hydraulic_electronic" "electronic_cooler"
[[4]]
[1] "Actuator_Pnematic" "Pnematic_cylinder" "cylinder_valve"
Объяснение этого решения:
Подумайте о том, чтобы сначала иметь дело только с одной строкой за раз, например, если у вас есть слова из одной строки уже в векторе:
x <- c("Electronic", "socket", "clamp", "cooler")
Ваш желаемый результат: Electronic_socket, socket_clamp, clamp_cooler
x[ -length(x) ] #gives you all but the last word
# [1] "Electronic" "socket" "clamp"
x[-1] #gives you everything except the first word
# [1] "socket" "clamp" "cooler"
#paste them together with a "_" between yields your desired output for that line
paste0( x[ -length(x) ], '_', x[-1] )
# [1] "Electronic_socket" "socket_clamp" "clamp_cooler"