【问题标题】:splitting the column using Regex in R在 R 中使用正则表达式拆分列
【发布时间】:2016-05-19 14:36:41
【问题描述】:

我有一个类型的字符数据

a[1:5]  
"Tampa Bay Buccaneers / 1st / 1st pick / 2015" 
"Tennessee Titans / 1st / 2nd pick / 2015"      
"Oakland Raiders / 1st / 4th pick / 2015"      
"Washington Redskins / 1st / 5th pick / 2015"  
"New York Jets / 1st / 6th pick / 2015"

第一季度。我想将该列分成四个单独的列并存储 每个都在您的数据框中。例如:

Tampa Bay Buccaneers, Tennessee Titans ... in data frame1 , 
1st, 1st, ... in data frame2
1st pick, 2nd pick, ... in data frame 3
2015, 2015, ... in data frame 4

第二季度。我们需要另一个数据框,其中包含数字和变量“a”中删除的所有文本。 例如:112015、122015、132015 等。

我被正则表达式困住了。请帮忙。

【问题讨论】:

  • 如果问题中有任何不清楚的地方,请告诉我。
  • 看看?strsplit
  • 是的,我尝试了 strsplit,但我对 split 参数感到困惑,我该如何将“/”放入 split 参数中。

标签: regex r dataframe


【解决方案1】:

我们可以使用" \\/ ") 将“a”向量拆分为listrbind 并转换为data.frame。

as.data.frame(do.call(rbind, strsplit(a, " \\/ ")), stringsAsFactors=FALSE)

如果我们需要多个data.frames,transposelist输出('lst'),将list中的每个vector转换为data.frame,更改list名称并使用list2env 在全局环境中创建多个 'data.frame' 对象(虽然不推荐)

library(data.table)
lst <- transpose(strsplit(a, " \\/ "))
list2env(setNames(Map(function(x,y) setNames(data.frame(x),y) , lst, 
        "Col1"), paste0("df", seq_along(lst))), envir = .GlobalEnv)
 df1
#               Col1
#1 Tampa Bay Buccaneers
#2     Tennessee Titans
#3      Oakland Raiders
#4  Washington Redskins
#5        New York Jets

数据

a <- c("Tampa Bay Buccaneers / 1st / 1st pick / 2015", "Tennessee Titans / 1st / 2nd pick / 2015", 
"Oakland Raiders / 1st / 4th pick / 2015", "Washington Redskins / 1st / 5th pick / 2015", 
"New York Jets / 1st / 6th pick / 2015")

【讨论】:

  • 谢谢阿克伦。但现在我希望将其拆分为 4 个数据帧。输出类似于 V1 V2 V3 1 Tampa Bay Buccaneers 1st 1st pick 2 Tennessee Titans 1st 2nd pick 3 Oakland Raiders 1st 4th pick 4 Washington Redskins 1st 5th pick 5 New York Jets 1st 6th pick 6 Chicago Bears 1st 7th pick 7 Atlanta Falcons 1st第 8 顺位 8 纽约巨人队第 1 顺位第 9 顺位
【解决方案2】:
a<-c("Tampa Bay Buccaneers / 1st / 1st pick / 2015", "Tennessee Titans / 1st / 2nd pick / 2015",
"Oakland Raiders / 1st / 4th pick / 2015" , "Washington Redskins / 1st / 5th pick / 2015" , "New York Jets / 1st / 6th pick / 2015")

library(stringr)
library(plyr)
options(stringsAsFactors = FALSE)

Q1<-do.call(rbind,str_split(a, "/"))
Q1b<-apply(Q1,2,data.frame)
Q2<-as.data.frame(gsub("[A-Za-z///]+[[:blank:]]","",a))

【讨论】:

    【解决方案3】:

    stringr 包有几个有用的函数:str_split 和 str_split_fixed。

    library(stringr)
    data.frame(str_split_fixed(a, "/", n=4))
    

    【讨论】:

    • 谢谢@Dave2e。 library(stringr) y = data.frame(str_split_fixed(a, "/", n=4)) 你能告诉我我们如何访问 "y' 内的变量,因为在 y 内创建了另外四列吗?
    • 结果是一个 4 列宽 x n 长的数据框。通过典型的索引机制访问这些值:y[i, j],其中 i 表示行,j 表示列。我建议阅读:cran.r-project.org/doc/manuals/r-devel/R-intro.html
    猜你喜欢
    • 1970-01-01
    • 2021-04-23
    • 2020-08-07
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 2020-06-08
    相关资源
    最近更新 更多