R:将向量折叠两个元素

标签 r merge paste n-gram

我有一个向量,例如sdata = c('a', 'b', 'c', 'd')

sdata
[1] "a" "b" "c" "d"

如何将其折叠为两个(或更多,如果需要)元素以获得以下输出?

desiredOutput 
[1] "a b" "b c" "c d"

谢谢!

编辑:真实样本数据:

sdata = list(c("salmon", "flt", "atl", "farm", "wild", "per", "lb", "or", 
"fam", "pk"), c("vit", "min", "adult", "eye", "visit", "our", 
"pharmacy", "we", "accept", "express", "script", "offer", "val", 
"mathing", "pricing", "fast", "conv", "service"), c("ct", "gal", 
"or", "drawstring", "odor", "shield", "twist", "tie", "lawn", 
"leaf", "in", "plumber", "brush"))

 sdata
[[1]]
 [1] "salmon" "flt"    "atl"    "farm"   "wild"   "per"    "lb"     "or"     "fam"    "pk"    

[[2]]
 [1] "vit"      "min"      "adult"    "eye"      "visit"    "our"      "pharmacy" "we"       "accept"   "express"  "script"  
[12] "offer"    "val"      "mathing"  "pricing"  "fast"     "conv"     "service" 

[[3]]
 [1] "ct"         "gal"        "or"         "drawstring" "odor"       "shield"     "twist"      "tie"        "lawn"      
[10] "leaf"       "in"         "plumber"    "brush"     

最佳答案

我们可以删除“sdata”的最后一个和第一个元素和 paste向量具有相同的长度。

 paste(sdata[-length(sdata)], sdata[-1])
 #[1] "a b" "b c" "c d"

这也可以写成

 paste(head(sdata,-1), tail(sdata,-1))
 #[1] "a b" "b c" "c d"

更新

基于新的“sdata”(在 list 中),我们使用 lapply循环 list元素并使用相同的代码

lapply(sdata, function(x) paste(head(x,-1), tail(x,-1)))
#[[1]]
#[1] "salmon flt" "flt atl"    "atl farm"   "farm wild"  "wild per"  
#[6] "per lb"     "lb or"      "or fam"     "fam pk"    

#[[2]]
# [1] "vit min"         "min adult"       "adult eye"       "eye visit"      
# [5] "visit our"       "our pharmacy"    "pharmacy we"     "we accept"      
# [9] "accept express"  "express script"  "script offer"    "offer val"      
#[13] "val mathing"     "mathing pricing" "pricing fast"    "fast conv"      
#[17] "conv service"   

#[[3]]
# [1] "ct gal"          "gal or"          "or drawstring"   "drawstring odor"
# [5] "odor shield"     "shield twist"    "twist tie"       "tie lawn"       
# [9] "lawn leaf"       "leaf in"         "in plumber"      "plumber brush"  

或者不使用匿名函数我们可以 pasteMap删除第一个和最后一个 listsdata 中的元素

  Map(paste, lapply(sdata, head, -1), lapply(sdata, tail, -1))

关于R:将向量折叠两个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32100417/

相关文章:

performance - 防止R中的性能下降

linux - 多行粘贴 (ctrl-r) 到 ex 或搜索|将 ^M 替换为\r

r - 将值向量转换为逗号分隔的向量,每个向量都带有引号

r - 在R中字符串的每个字符之间插入竖线

r - ggplot facet_wrap 在每个方面都有特定的变量顺序

sql - 使用 Postgres SQL,模拟单行 UPSERT 最快的事务是什么?

linux - 如何将 sox 与音频文件列表一起使用

Sqlite 将数据库合并为一个,具有唯一值,保留外键关系

r - 当遵守条件时如何在两个数据框之间粘贴值

roxygen2 不生成 .Rd 文件