如何拆分和提取元素以获得新的data.frame
我想拆分一列data.frame,以形成一个新的data.frame和两列,例如,谢谢!我需要一种有效的解决方法,因为原始数据集大约有1000万行如何拆分和提取元素以获得新的data.frame,r,R,我想拆分一列data.frame,以形成一个新的data.frame和两列,例如,谢谢!我需要一种有效的解决方法,因为原始数据集大约有1000万行 V1 AA-11-aa BB-22-bb CC-33-cc DD-44-dd 成为 V2 V3 AA11 aa BB22 bb CC33 cc DD44 d
V1
AA-11-aa
BB-22-bb
CC-33-cc
DD-44-dd
成为
V2 V3
AA11 aa
BB22 bb
CC33 cc
DD44 dd
这实现了你想要的
mydf <- data.frame(V1=c("AA-11-aa", "BB-22-bb", "CC-33-cc", "DD-44-dd"))
strings <- unlist(strsplit(x=as.character(mydf$V1), split="-"))
n <- nrow(mydf)
data.frame(V1=paste(strings[seq(1, length.out=n, by=3)], strings[seq(2, length.out=n, by=3)], sep=""),
V2=strings[seq(3, length.out=n, by=3)])
mydf一种可能性是将子字符串与“data.table”一起使用:
库(data.table)
DT这里有一个正则表达式的解决方案。它也适用于一般情况(“AA-xx-xx-xx-…-11 AA”
):
结果是:
V1 V2 V3
1 AA-11-aa AA11 aa
2 BB-22-bb BB22 bb
3 CC-33-cc CC33 cc
4 DD-44-dd DD44 dd
嗨,欢迎来到SO!你能告诉我们到目前为止你都做了些什么吗。谢谢。请用fread
(来自package data.table)读入,并使用-
作为分隔符。我的原始数据集是100万行,因此我认为“我不确定是否理解。nrow()
类似于length()
。数据帧的行上没有循环。如果这些语句很慢nrow()
可能不是瓶颈。mydf[,c(“V2”,“V3”)],这是我的具体问题,你能帮我解决吗?Matho,事实上,V1中的元素比我描述的要多得多,比如“AA xx xx xx-…-11 AA”“,子字符串仍然有效吗?@user2810161,也许如果你更准确地描述你的问题,你会得到更有意义的回答。这是我的具体问题谢谢!事实上,这是我真正的问题
transform(mydf, V2 = gsub("([A-Z]+).*\\-([0-9]+).*", "\\1\\2", V1),
V3 = gsub(".*\\-([a-z]+)", "\\1", V1))
V1 V2 V3
1 AA-11-aa AA11 aa
2 BB-22-bb BB22 bb
3 CC-33-cc CC33 cc
4 DD-44-dd DD44 dd