我有一個df(day.df
)與列vial
我試圖分裂成四個新的列。新的列將是treatment
gender
line
block
。 day.df
數據幀也有保留的列response
& explanatory
。字符串拆分在R與複雜的部門
所以day.df
目前看起來是這樣的(前4 31000行):
vial response explanatory
Xm1.1 0 4
Xm2.1 0 4
Xm3.1 0 4
Xm4.1 0 4
. . .
. . .
. . .
的vial
列的當前內容是這樣的.. Xm1.2
。
- 的第一個字符(顯示爲X)可以是
X
或A
- 這將是treament
。 - 第二個字符(示例中顯示爲
m
)可以是m
或f
- 這是gender
。 - 第三個字符(顯示爲
1
),範圍從1
-40
- 此 是line
。 - 第四個也是最後一個字符是
block
,範圍從1
-4
- 「。」需要丟棄
這樣的新day.df
會是這個樣子(我用4「隨機」行說明每個新列內的變化):
vial response explanatory treatment gender line block
Xm1.1 0 4 X m 1 1
Am1.1 0 4 A m 1 1
Xf3.2 0 4 X f 3 2
Xm4.2 0 4 X m 4 2
. . .
. . .
. . .
我已經在網上看看如何做到這一點,這是最接近我來;我試圖分裂vial
列這樣的...
> a=strsplit(day.df$vial,"")
> a[1] "Xm1.2"
,但有問題時,該字符串的「行」節去> 9,因爲那時兩個字符的在那裏,如(該行地方vial
是Af20.2
)。
> a[300]
[[1]]
[1] "A" "f" "2" "0" "." "2"
應閱讀:
> a[300]
[[1]]
[1] "A" "f" "20" "." "2"
所以我需要幫助解決的步驟是:
- 與字符串時的
line
部分解決這個問題超過9。 - 分割字符串列表添加到
day.df
數據框的四個必需列
代表[GriffinEvo](http://stackoverflow.com/users/1040035/griffinevo):應用和測試代碼:'a = gsub('(X | A)(m | f)([0- 9] {1,2})[。]([1-4])','\\ 1 | \\ 2 | \\ 3 | \\ 4',day.df $ vial)do.call(rbind, strsplit(a,'[|]'))day.df = cbind(day.df,do.call(rbind,strsplit(a,'[|]')))colnames(day.df)[4:7] = c(「治療」,「性別」,「行」,「塊」)。有關正確的格式,請參閱[評論](http://stackoverflow.com/review/suggested-edits/2449097)。 –