我在R中有一个约50,000行的字符向量(内容)。但是,从文本文件读入的某些行在不同的行上,不应该是。具体来说,这些行看起来像这样:
[1] hello,
[2] world
[3] ""
[4] how
[5] are
[6] you
[7] ""
我想把这些线组合在一起,这样我就有了这样的东西:
[1] hello, world
[2] how are you
我试过写一个for循环:
for(i in 1:length(content)){
if(content[i+1] != ""){
content[i+1] <- c(content[i], content[i+1])
}
}
但是当我运行循环时,我收到一个错误:缺少需要TRUE / FALSE的值。
任何人都可以建议更好的方法来做到这一点,甚至可能不使用循环吗?
谢谢!
编辑: 我实际上试图将其应用于每个都有数千行的文档语料库。关于如何将这些解决方案转换为可应用于每个文档内容的函数的任何想法?
答案 0 :(得分:4)
你不需要循环来做那个
let request = Alamofire.request(.POST, ServerConfig.ADD_PRODUCT_URL, parameters: productJSON, encoding: .JSON)
request.responseJSON { request, response, result in
print(request!.URL)
print(response)
print(result)
}
debugPrint(request)
答案 1 :(得分:2)
我认为有更优雅的解决方案,但这可能对您有用:
\\"
答案 2 :(得分:1)
以下是使用data.table
的不同方法,可能比for
或*apply
循环更快:
library(data.table)
dt <- data.table(x)
dt[, .(paste(x, collapse = " ")), rleid(x == "")][V1 != ""]$V1
#[1] "hello, world" "how are you"
示例数据:
x <- c("hello,", "world", "", "how", "are", "you", "")
答案 3 :(得分:0)
将""
替换为稍后可以拆分的内容,然后将这些字符折叠在一起,然后使用strsplit()
。在这里,我使用了换行符,因为如果你只是粘贴它,你可以得到输出上的不同行,例如cat(txt3)
会在单独的一行输出每个短语。
txt <- c("hello", "world", "", "how", "are", "you", "", "more", "text", "")
txt2 <- gsub("^$", "\n", txt)
txt3 <- paste(txt2, collapse = " ")
unlist(strsplit(txt3, "\\s\n\\s*"))
## [1] "hello world" "how are you" "more text"
答案 4 :(得分:0)
添加到混音中的另一种方法:
tapply(x[x != ''], cumsum(x == '')[x != '']+1, paste, collapse=' ')
# 1 2 3
#"hello, world" "how are you" "more text"
按非空字符串分组。并按组将元素粘贴在一起。