字符串拆分并展开分隔符处的(向量):R

时间:2015-07-21 07:30:00

标签: r

我有这个矢量(它的大小)// Create Datagrid Mytable = new DataTable("My Table"); // Add Columns Mytable.Columns.Add(My_Localization.Cultures.Resources.UserId); Mytable.Columns.Add(My_Localization.Cultures.Resources.Name); // Fill data DataRow dr = Mytable.NewRow(); dr[0] = UserId; dr[1] = Name; // Add itemsource DetailsDlg.ItemsSource = Mytable.AsDataView(); 。我需要在myvec分割它们并创建另一个结果向量/。我怎样才能在R中完成这项工作?

resvector

3 个答案:

答案 0 :(得分:5)

你可以尝试使用@Tensibai提到的strsplit

sp_vec <- strsplit(myvec, "/") # split the element of the vector by "/" : you will get a list where each element is the decomposition (vector) of one element of your vector, according to "/"
ts_vec <- lapply(sp_vec, # for each element of the previous list, do
                 function(x){
                     base <- sub("\\w$", "", x[1]) # get the common beginning of the column names (so first item of vector without the last letter)
                     x[-1] <- paste0(base, x[-1]) # paste this common beginning to the rest of the vector items (so the other letters)
                     x}) # return the vector
resvector <- unlist(ts_vec) # finally, unlist to get the needed vector

resvector
# [1] "IID:WE:G12D"   "IID:WE:G12V"   "IID:WE:G12A"   "GH:SQ:p.R172W" "GH:SQ:p.R172G" "HH:WG:p.S122F" "HH:WG:p.S122H"

答案 1 :(得分:5)

以下是regex和一些函数式编程的简明答案:

x = gsub('[A-Z]/.+','',myvec)
y = strsplit(gsub('[^/]+(?=[A-Z]/.+)','',myvec, perl=T),'/')

unlist(Map(paste0, x, y))
# "IID:WE:G12D"   "IID:WE:G12V"   "IID:WE:G12A" "GH:SQ:p.R172W" "GH:SQ:p.R172G" "HH:WG:p.S122F" "HH:WG:p.S122H"

答案 2 :(得分:1)

myvec<-c("IID:WE:G12D/V/A","GH:SQ:p.R172W/G", "HH:WG:p.S122F/H")

custmSplit <- function(str){
  splitbysep <-  strsplit(str, '/')[[1]]
  splitbysep[-1] <- paste0(substr(splitbysep[1], 1, nchar(splitbysep[1])), splitbysep[-1])
  return(splitbysep)
}

do.call('c', lapply(myvec, custmSplit))
# [1] "IID:WE:G12D"    "IID:WE:G12DV"   "IID:WE:G12DA"   "GH:SQ:p.R172W"  "GH:SQ:p.R172WG" "HH:WG:p.S122F"  "HH:WG:p.S122FH"