R将单词分成新列

时间:2015-06-02 07:30:49

标签: r dataframe

我在以下数据框中遇到了一些问题:

    Treat.Name   HWAH
    P_Control_1  2918.000
    P_Control_2  2818.536
    P_Control_3  2619.036
    P_EMFL10_1   2740.786
    P_EMFL10_2   2616.893
    P_EMFL10_3   2395.964

我正在尝试在“_”处打破Treat.Name中的字符名称,并创建两个名为“Cult”和“Num。”的新列,如下例所示:

 Cult   Treat.Name  Num.    HWAH
 P      Control     1       2918.000
 P      Control     2       2818.536
 P      Control     3       2619.036
 P      EMFL10      1       2740.786
 P      EMFL10      2       2616.893
 P      EMFL10      3       2395.964

我正在寻找一些如何做到这一点的例子,但我找不到一些接近我正在寻找的东西。

2 个答案:

答案 0 :(得分:5)

尝试

library(splitstackshape)
 cSplit(df1, 'Treat.Name', '_')

或者

library(tidyr)
separate(df1, Treat.Name, into=c('Cult', 'Treat.Name', 'Num.'))

或使用base R

cbind(read.table(text=df1$Treat.Name,sep="_"), df1['HWAH'])

答案 1 :(得分:5)

另一个选项,基础R:

newdf <- data.frame(do.call("rbind", strsplit(df$Treat.Name, "_")), df$HWAH, stringsAsFactors=F)
colnames(newdf) <- c("Cult", "Treat.Name", "Num.", "HWAH")

    newdf
   #             Cult Treat.Name Num.     HWAH
   # P_Control_1    P    Control    1 2918.000
   # P_Control_2    P    Control    2 2818.536
   # P_Control_3    P    Control    3 2619.036
   # P_EMFL10_1     P     EMFL10    1 2740.786
   # P_EMFL10_2     P     EMFL10    2 2616.893
   # P_EMFL10_3     P     EMFL10    3 2395.964

或者(根据@akruns评论)使用data.table的开发版本你可以简单地做

## library(devtools)
## install_github("Rdatatable/data.table", build_vignettes = FALSE)

library(data.table) ## v >= 1.9.5
setDT(df)[, c('Cult', 'Treat.Name1', 'Num.') := tstrsplit(Treat.Name, '_')]