2014-01-30 3 views
5

"Exp 928.6.3 (DMSO)"와 같은 텍스트가 포함 된 열이있는 data.table이 있습니다. "Exp 928"및 "6.3"과 같은 열로이 구문을 분석하고 싶습니다. 그것은 거대한 data.table이 빠른 작업을 할 수 있어야하는 것처럼 보이지만, 나의 의지로 그것을 어떻게 구부리는지 알 수는 없습니다. 이견있는 사람?R data.table text parsing

감사합니다, 제임스

> dput(head(dat)) 
structure(list(Experiment = c("Exp 927.1.1 (DMSO)", "Exp 927.1.2 (DMSO)", 
"Exp 927.1.3 (DMSO)", "Exp 927.1.4 (DMSO)", "Exp 927.1.5 (DMSO)", 
"Exp 927.1.6 (DMSO)"), Conc.1..LP9. = c("Failed", "Failed", "Failed", 
"Failed", "Failed", "0.97"), Conc.2..LP11. = c("Failed", "Failed", 
"Failed", "Failed", "Failed", "0.87"), Conc.3..LP13. = c("Failed", 
"Failed", "Failed", "Failed", "Failed", "0.81"), Conc.4..LP15. = c("Failed", 
"Failed", "Failed", "Failed", "Failed", "0.76"), Conc.5..LP17. = c("Failed", 
"Failed", "Failed", "Failed", "Failed", "0.58"), Conc.1.uM..µM. = c("Failed", 
"Failed", "Failed", "Failed", "Failed", "0.001"), Conc.2.uM..µM. = c("Failed", 
"Failed", "Failed", "Failed", "Failed", "0.01"), Conc.3.uM..µM. = c("Failed", 
"Failed", "Failed", "Failed", "Failed", "0.1"), Conc.4.uM..µM. = c("Failed", 
"Failed", "Failed", "Failed", "Failed", "1"), Conc.5.uM..µM. = c("Failed", 
"Failed", "Failed", "Failed", "Failed", "10"), exptNo = list(
"927", "1", "1", "927", "1", "1"), sample = c("927", "1", 
"2", "927", "1", "2"), replicate = c("927", "1", "3", "927", 
"1", "3")), .Names = c("Experiment", "Conc.1..LP9.", "Conc.2..LP11.", 
"Conc.3..LP13.", "Conc.4..LP15.", "Conc.5..LP17.", "Conc.1.uM..µM.", 
"Conc.2.uM..µM.", "Conc.3.uM..µM.", "Conc.4.uM..µM.", "Conc.5.uM..µM.", 
"exptNo", "sample", "replicate"), sorted = "Experiment", class = c("data.table", 
"data.frame"), row.names = c(NA, -6L), .internal.selfref = <pointer: 0x0000000000130788>) 
+0

나는이 데이터를 추가했습니다. – James

답변

5

나는 간단한 해결책이 있다고 생각,

dat[,do.call(rbind, 
     strsplit(gsub("(.*?)[.](.*) .*","\\1|\\2",Experiment),'[|]'))] 

    [,1]  [,2] 
[1,] "Exp 927" "1.1" 
[2,] "Exp 927" "1.2" 
[3,] "Exp 927" "1.3" 
[4,] "Exp 927" "1.4" 
[5,] "Exp 927" "1.5" 
[6,] "Exp 927" "1.6"