gpt4 book ai didi

r - 给定分隔符的输入,将表的一列拆分为多列

转载 作者:行者123 更新时间:2023-12-04 12:08:42 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to strsplit different number of strings in certain column by do function

(1 个回答)


4年前关闭。




也许我想做的事情是不可能的,所以我提出了这个问题来知道是否有办法。
看完这篇 question在stackoverflow中,我看到有一种方法可以将一列拆分为不同的列,但这不是我想要的,我有一个 Shiny 的应用程序,我可以在其中包含具有以下值的表:

Phones                             price
Nokia 1234D - J298 6732 - LM 2 103$
Samsung 3342L - J2YY 4372 - YU 3 130$
Samsung 3042X - IKAA 3221 - GN 4 102$

所以用户来了说我想在列 中划分这些值电话 如我所愿,所以我想到的想法是让用户写一些类似 ("", "- ", "", "- ") 因为我的意思是单独的 nokia, 1234D, J298, 6732, LM 2 in 5 列给出了提到的分隔符。

这是示例代码:
library(stringr)
c=c(" "," - "," "," - ")
mytable <-data.table(Phones=c("Nokia 1234D - J298 6732 - LM 2",
"Samsung 3342L - J2YY 4372 - YU 3",
"Samsung 3042X - IKAA 3221 - GN 4"),price= c("103$", "130$", "102$") )
aux = str_split_fixed(mytable$Phones, c, 5)
mytable<-data.table( aux, mytable$price)

但是我得到以下结果,这不是我想要的结果,它会按需要分开,重复第一行。:
              V1        V2   V3   V4          V5   V2
1: Nokia 1234D - J298 6732 - LM 2 103$
2: Samsung 3342L J2YY 4372 YU 3 130$
3: Samsung 3042X - IKAA 3221 - GN 4 102$
4: Nokia 1234D J298 6732 LM 2 103$

如果您有更好的解决方案,那将非常有帮助。

最佳答案

我们可以 separate将“电话”列分成 5 列,其中 extra= "merge"将最后一列保留为字符串 "LM 2", "YU 3"等等

library(tidyr)
library(dplyr)
mytable %>%
separate(Phones, into = paste0("V", 1:5), remove = FALSE, extra = "merge")
# Phones V1 V2 V3 V4 V5 price
#1: Nokia 1234D - J298 6732 - LM 2 Nokia 1234D J298 6732 LM 2 103$
#2: Samsung 3342L - J2YY 4372 - YU 3 Samsung 3342L J2YY 4372 YU 3 130$
#3: Samsung 3042X - IKAA 3221 - GN 4 Samsung 3042X IKAA 3221 GN 4 102$

如果我们需要自定义拆分,请使用 extract
mytable %>%
extract(Phones, into = paste0("V", 1:4), remove = FALSE,
"^(\\w+\\s+\\w+)\\s*-\\s*(\\w+)\\s+(\\w+)\\s*-\\s*(\\w+\\s+\\w+)")
# Phones V1 V2 V3 V4 price
#1: Nokia 1234D - J298 6732 - LM 2 Nokia 1234D J298 6732 LM 2 103$
#2: Samsung 3342L - J2YY 4372 - YU 3 Samsung 3342L J2YY 4372 YU 3 130$
#3: Samsung 3042X - IKAA 3221 - GN 4 Samsung 3042X IKAA 3221 GN 4 102$
^意味着字符串的开头,后跟单词( \\w+ )后跟一个或多个空格( \\s+ )和下一个单词( \\w+ ),我们将其作为一组( (...) )捕获,类似地,字符匹配基于单词,空格字符

注意:第一种方法给出了帖子中描述的预期输出,第二种方法来自评论中要求的输出

如果我们需要通过“c”中的自定义拆分来拆分
library(stringr)
c <- c(" "," - "," "," - ") #it is better to avoid function names for object names
fsplit <- function(str1, splt) {
lst <- str_split(str1, splt, n = 2)
v1 <- sapply(lst, `[`, 1)
v2 <- sapply(lst, `[`, 2)
list(v1, v2)
}

mytable[, V5 := Phones]
nm1 <- paste0("V", seq_along(c))
for(i in seq_along(c)){
tmp <- fsplit(mytable$V5, c[i])
mytable[, (nm1[i]) := tmp[[1]]]
mytable[, V5 := tmp[[2]]][]
}
setcolorder(mytable, c("Phones", nm1, "V5", "price"))
mytable
# Phones V1 V2 V3 V4 V5 price
#1: Nokia 1234D - J298 6732 - LM 2 Nokia 1234D J298 6732 LM 2 103$
#2: Samsung 3342L - J2YY 4372 - YU 3 Samsung 3342L J2YY 4372 YU 3 130$
#3: Samsung 3042X - IKAA 3221 - GN 4 Samsung 3042X IKAA 3221 GN 4 102$

关于r - 给定分隔符的输入,将表的一列拆分为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45835732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com