在r
中,data frame
(df
)如下所示,其中ID
字符串为10个字符。
df:
ID Var1 Var2
1 0334KLM001 aa xx
2 1334HDM002 zvv rr
3 2334WEM003 qetr qwe
4 3334OKT004 ff sdf
5 4334WER005 ee sdf
6 5334BBC006 qly ssg
7 6334QQQ007 kk htj
8 7334AAA008 uu yjy
9 8334CBU009 ww wttt
10 9334MLO010 aa dg
意图:
使用r
命令,我希望仅将ID
拆分为两个附加列,仅使用数字。例如,我想向Spl_1
添加两个列(Spl_2
& df
},其中Spl_1
具有前四个字符ID
列中的em>和Spl_2
具有ID
字符的其余部分(即 5:10)。
预期的output
将是这样的:
output:
ID Var1 Var2 Spl_1 Spl_2
1 0334KLM001 aa xx 0334 KLM001
2 1334HDM002 zvv rr 1334 HDM002
3 2334WEM003 qetr qwe 2334 WEM003
4 3334OKT004 ff sdf 3334 OKT004
5 4334WER005 ee sdf 4334 WER005
6 5334BBC006 qly ssg 5334 BBC006
7 6334QQQ007 kk htj 6334 QQQ007
8 7334AAA008 uu yjy 7334 AAA008
9 8334CBU009 ww wttt 8334 CBU009
10 9334MLO010 aa dg 9334 MLO010
我阅读了以下问题:Q1& Q2。虽然提供了非常丰富的信息,但我仍然没有得到如何通过字符数来分割刺痛。我找到了'stringr'包,我用str_sub
命令学习,我可以按编号拆分。见下文:
library(stringr)
ID <- "0334KLM001"
str_sub(ID, c(1,5), c(4,10))
[1] "0334" "KLM001"
但我不知道如何与其他r
命令结合以获得上面提供的output
?
答案 0 :(得分:2)
我们可以使用library(tidyr)
separate(df, ID, into = c("Spl_1", "Spl_2"), sep = 4, remove = FALSE)
# ID Spl_1 Spl_2 Var1 Var2
#1 0334KLM001 0334 KLM001 aa xx
#2 1334HDM002 1334 HDM002 zvv rr
#3 2334WEM003 2334 WEM003 qetr qwe
#4 3334OKT004 3334 OKT004 ff sdf
#5 4334WER005 4334 WER005 ee sdf
#6 5334BBC006 5334 BBC006 qly ssg
#7 6334QQQ007 6334 QQQ007 kk htj
#8 7334AAA008 7334 AAA008 uu yjy
#9 8334CBU009 8334 CBU009 ww wttt
#10 9334MLO010 9334 MLO010 aa dg
vector
如果我们想要3列,我们可以在sep
separate(df, ID, into = c("Spl_1", "Spl_2", "Spl_3"), sep = c(4,8), remove = FALSE)
# ID Spl_1 Spl_2 Spl_3 Var1 Var2
#1 0334KLM001 0334 KLM0 01 aa xx
#2 1334HDM002 1334 HDM0 02 zvv rr
#3 2334WEM003 2334 WEM0 03 qetr qwe
#4 3334OKT004 3334 OKT0 04 ff sdf
#5 4334WER005 4334 WER0 05 ee sdf
#6 5334BBC006 5334 BBC0 06 qly ssg
#7 6334QQQ007 6334 QQQ0 07 kk htj
#8 7334AAA008 7334 AAA0 08 uu yjy
#9 8334CBU009 8334 CBU0 09 ww wttt
#10 9334MLO010 9334 MLO0 10 aa dg
extract
如果开头的数字不是固定长度,请使用extract(df, ID, into = c("Spl_1", "Spl_2"), "^([0-9]+)(.*)", remove = FALSE)
extract(df, ID, into = c("Spl_1", "Spl_2", "Spl_3"), "(.{4})(.{4})(.*)", remove = FALSE)
和3列,
pandas