通过|解析字符串

时间:2014-08-13 14:22:21

标签: r

我有一个类似的字符串列表:

categories <- "|Music|Consumer Electronics|Mac|Software|"

但是,我只想获得第一个字符串。在这种情况下Music(没有|)。我试过了:

sub(categories, pattern = " |", replacement = "")

然而,这并没有给我预期的结果。任何建议如何正确解析我的字符串?

感谢您的回答!

更新

> dput(head(df))
structure(list(data.founded_at = c("01.06.2012", "26.10.2012", 
"01.04.2011", "01.01.2012", "10.10.2011", "01.01.2007"), data.category_list = c("|Entertainment|Politics|Social Media|News|", 
"|Publishing|Education|", "|Electronics|Guides|Coffee|Restaurants|Music|iPhone|Apps|Mobile|iOS|E-Commerce|", 
"|Software|", "|Software|", "|Curated Web|")), .Names = c("data.founded_at", 
"data.category_list"), row.names = c(NA, 6L), class = "data.frame")

3 个答案:

答案 0 :(得分:3)

另一种选择可能是scan

na.omit(scan(text = categories, sep = "|", what = "", na.strings = ""))[1]
# Read 6 items
# [1] "Music"

答案 1 :(得分:1)

找到一个能够对特定字符处的字符串进行标记的函数:strsplit将是我的猜测。

http://stat.ethz.ch/R-manual/R-devel/library/base/html/strsplit.html

答案 2 :(得分:1)

请注意,split中的参数是regexp,因此使用split="|"将不起作用(除非您在注释中指定了joran -thanks-中指定的fixed = TRUE)

strsplit(categories,split="[|]")[[1]][2]

要将其应用于数据框,您可以执行以下操作:

sapply(df$data.category_list, function(x) strsplit(x,split="[|]")[[1]][2])

但这更快(见评论):

vapply(strsplit(df$data.category_list, "|", fixed = TRUE), `[`, character(1L), 2)

(感谢Ananda Mahto)