我在以下数据框中遇到了一些问题:
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
我正在寻找一些如何做到这一点的例子,但我找不到一些接近我正在寻找的东西。
答案 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, '_')]