gpt4 book ai didi

R 中的字符串拆分,具有复杂的除法

转载 作者:行者123 更新时间:2023-12-02 07:01:46 24 4
gpt4 key购买 nike

我有一个 df (day.df),其中包含 vial 列,我试图将其拆分为四个新列。新列将为treatment gender line blockday.df 数据框还具有将保留的 responseexplanatory 列。

所以 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)可以是 XA - 这将是治疗
  • 第二个字符(在示例中显示为 m)可以是 mf - 这是性别
  • 第三个字符(显示为 1),范围为 1-40 - this是
  • 第四个也是最后一个字符是 block ,范围为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 时出现问题,因为那里有两个字符,例如(对于 vialAf20.2 的行)。

 > a[300]
[[1]]
[1] "A" "f" "2" "0" "." "2"

应该读作:

 > a[300]
[[1]]
[1] "A" "f" "20" "." "2"



所以我需要帮助解决的步骤是:

  1. 克服字符串超过 9 时的 line 部分的问题。
  2. 将分割字符串列表添加到 day.df 数据帧的四个必需列中

最佳答案

像这样使用gsubstrsplit:

v <- c('Xm1.1','Xf3.2')
h <- gsub('(X|A)(m|f)([0-9]{1,2})[.]([1-4])','\\1|\\2|\\3|\\4',v)
do.call(rbind,strsplit(h,'[|]'))

[,1] [,2] [,3] [,4]
[1,] "X" "m" "1" "1"
[2,] "X" "f" "3" "2"

结果是一个data.frame,您可以将它cbind到您的原始data.frame。

编辑 @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 ("treatment" , "gender" , "line" , "block")

关于R 中的字符串拆分,具有复杂的除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17488286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com