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

时间:2017-03-20 09:57:41

标签: r extract stringr strsplit

我已按以下格式获得结果:

     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中,我希望将所有m替换为2的值,并将所有st替换为3的值。结果应如下所示:

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

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

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

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

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

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

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

PS:我赞美任何意见 - 评论,评论,提示。我是一个学习者,任何建议对我都很有价值。

1 个答案:

答案 0 :(得分:2)

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

或者,我们可以使用read.table分隔sep,使用&#34; Wert&#34; transformcbind分隔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 。柱

  <ImageView
            android:id="@+id/item_image"
            android:layout_width="fill_parent"
            android:layout_height="60dp"
            android:background="@android:color/transparent" 
           android:layout_alignParentStart="true"
            android:layout_centerVertical="true"
            android:src="@drawable/tabless"></ImageView>