我有一个 df ( day.df
) 列vial
,我试图将其拆分为四个新列。新列将是treatment
gender
line
block
. day.df
数据框还具有将保留的列& response
。explanatory
所以day.df
目前看起来像这样(31000 行中的前 4 行):
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
and 范围从1
-4
- 这 ”。” 需要丢弃
因此,新的day.df
看起来像这样(我使用四个“随机”行来说明每个新列中的变化):
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
is的行Af20.2
)。
> a[300]
[[1]]
[1] "A" "f" "2" "0" "." "2"
应该读作:
> a[300]
[[1]]
[1] "A" "f" "20" "." "2"
所以我需要帮助解决的步骤是:
- 克服
line
超过9时字符串部分的问题。 - 将拆分字符串的列表添加到
day.df
所需的四个列中的数据框中