如何操作拆分数据框以基于R中的grep添加新矢量

时间:2015-02-15 16:25:13

标签: r dataframe strsplit

我在薪资数据的CSV中有一列,其中包含以下类型的数据:

  • 单元格中没有任何内容
  • “£2.5-£3.5 an hour”
  • “每小时4.8英镑”
  • “每年40,000英镑至60,000英镑”
  • 每年6万英镑

我的目标是:

  1. 将此df $ salary列拆分为尽可能多的列(通过分隔符" "
  2. 对于第5列为空白的行(工资是固定的),取分割数据框的第一个值并将其作为新列作为货币,乘以基于第3列的设定数是“小时”(乘以8 * 262得到年薪)等。
  3. 对于第5列不为空白的行(工资是范围),取分割数据框的第2和第4列的中间数字范围,将其添加到工资的同一新列中,并且基于拆分数据框的第5列(年,月等)
  4. 的年度
  5. 将此新工资列附加到包含完整数据的旧数据框。
  6. 到目前为止,我有data_split<- strsplit(as.character(data$salary), split=" ")来拆分我正在寻找的列,但我得到了这个输出:

    > tail(data_split)
    
    [[1]]
    [1] "£26,000" "a"       "year"   
    
    [[2]]
    character(0)
    
    [[3]]
    [1] "£100" "a"    "day" 
    
    [[4]]
    [1] "£16,107" "a"       "year"   
    
    [[5]]
    [1] "£15,747" "a"       "year"   
    
    [[6]]
    [1] "£9.00"  "-"      "£15.50" "an"     "hour" 
    

    知道接下来要做什么吗?我在堆栈溢出时发现的难度与其他答案的关系是我正在基于数据帧的第5列上的if条件进行操作。如果我能从这个在线课程中访问我的R材料,我会很高兴,但是它们被阻止了!

1 个答案:

答案 0 :(得分:0)

我猜你想要值和时间单位,以及指示值是否指定范围的指标。这是一种提取这些数据的方法:

valueList <- lapply(data_split,
                 function(x){
                     # isolate the strings starting with £
                     x = grep("^£",x,value=T)
                     # convert to numeric
                     x = as.numeric(substr(x,2,nchar(x)))})

# extract vectors with the minimum and maximum values
minValue <- lapply(valueList,min)
maxValue <- lapply(valueList,max)

# identify values specified by a range
isRange <- minValue == maxValue)

# identify the unit of time
timeUnit <- character(length(data_split))
timeUnit[grepl('year', data)] <- 'year'
timeUnit[grepl('day', data)] <- 'day'
timeUnit[grepl('month', data)] <- 'month'
timeUnit[grepl('hour,% data)] <- 'hour'