将列拆分为 2 并按数字替换字符 - R

spliting column into 2 and replace character by number - R

我得到了以下格式的结果:

     Parameter  Wert
...
99      se.m  0.1000
100     se.m  0.1000
101    se.st  0.5000
102    se.st  0.500
...

我想将 Parameter 列拆分为两列:ParameterInsentität。拆分应该在点 . 所在的位置进行。然后在结果列 Intensität 中,我想用 2 的值替换所有 m,并用 3 的值替换所有 st。结果应如下所示:

Parameter Intensität Wert
...
99  se        2  0.4000
100 se        2  0.0396
101 se        3  0.2702
102 se        3  1.1566
...

我已经设法获得了这种格式,但我相信还有更优雅的方法。

我获得结果的方式很笨拙。我最初在输出中有 2 列:se.mse.st。我手动更改了列名:

colnames(results) <- c("2", "3")

然后将两列合并为一列。然后我在每一行中添加了一个包含字符 se 的列。

results <- melt(results)
cbind( Parameter ="se", results)

我知道还有一个 alretnatives。例如,通过使用 tidyr 中的 extract,但我无法获得正确的表达式语法。还有 stringr 包,我可以使用 str_match 函数或者也可以使用 strsplit。所有这些看起来都很棒,但我似乎无法将它们应用于我的问题。我被困在这里。有类似的问题,但我找不到适合我的解决方案。

PS:我感谢任何输入 - 评论、批评、提示。我是一名学习者,任何建议对我来说都很有价值。

我们可以使用separate

library(tidyr)
library(dplyr)
separate(df1, Parameter, into = c("Parameter", "Intensitat")) %>%
                mutate(Intensitat = recode(Intensitat, m = 2, st = 3))

#  Parameter Intensitat Wert
#1        se          2  0.1
#2        se          2  0.1
#3        se          3  0.5
#4        se          3  0.5

或者我们可以通过指定 sep 来分离使用 read.table,使用 "Wert" 列

执行 transformation 和 cbind ]
cbind(transform(read.table(text= as.character(df1$Parameter), 
    col.names = c("Parameter", "Intensitat"), sep="."), 
      Intensitat = ifelse(Intensitat=="m", 2, 3)), df1["Wert"])
#    Parameter Intensitat Wert
#99         se          2  0.1
#100        se          2  0.1
#101        se          3  0.5
#102        se          3  0.5