如何拆分和提取元素以获得新的data.frame

如何拆分和提取元素以获得新的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

我想拆分一列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  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