【问题标题】:spliting column into 2 and replace character by number - R将列拆分为 2 并用数字替换字符 - R
【发布时间】:2017-03-20 09:57:40
【问题描述】:

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

     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)

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

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

【问题讨论】:

  • 检查 Rpubs 以使用 dplyr 和 tidyr 进行数据处理。我是在问了这个问题后才找到的。

标签: r extract stringr strsplit


【解决方案1】:

我们可以使用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

【讨论】:

  • 谢谢@akrun,这正是我想要的!
  • 我刚刚在Rpubs 上读到了有关管道运算符%&gt;% 的信息,它引导我使用separete 等其他功能。虽然我会把它放在这里,但可能对其他有类似问题的学生有用
  • @Danka 是的,tidyverse 包列表中有很多有用的功能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 2016-08-19
  • 2013-04-26
  • 1970-01-01
  • 2021-06-09
  • 2021-05-31
  • 1970-01-01
相关资源
最近更新 更多