在定义数据框时使用stringsAsFactors = FALSE
(或者如果它已经存在,请使用df1 <- transform(df1, ID1 = as.character(df1))
并使用指示的模式strsplit
。
df1 <- data.frame(ID1 = c("Gindalinc","Xaviertechnolgies","anine.inc(Nasq)","Xyzinc"),
y = 1:4, stringsAsFactors = FALSE)
s <- strsplit(df1$ID1, "[()]")
给予:
> s
[[1]]
[1] "Gindalinc"
[[2]]
[1] "Xaviertechnolgies"
[[3]]
[1] "anine.inc" "Nasq"
[[4]]
[1] "Xyzinc"
在问题更新后添加以包含所需的输出。read.pattern
在 gsubfn 包中使用来拆分字段,如下所示:
library(gsubfn)
cn <- c("ID1_s1", "ID1_s2")
with(df1, data.frame(read.pattern(text = ID1, pattern = "([^(]*)(.*)", col.names = cn), y))
giving:
ID1_s1 ID1_s2 y
1 Gindalinc 1
2 Xaviertechnolgies 2
3 anine.inc (Nasq) 3
4 Xyzinc 4
添加如果括号在输出中出现并不重要,那么另一个解决方案将是(使用s
上面的代码):
data.frame(ID1_s1 = sapply(s, "[", 1), ID1_s2 = sapply(s, "[", 2), y = df1$y)
给予:
ID1_s1 ID1_s2 y
1 Gindalinc <NA> 1
2 Xaviertechnolgies <NA> 2
3 anine.inc Nasq 3
4 Xyzinc <NA> 4