在R

时间:2016-09-05 22:19:24

标签: r string split

我已将我的CSV文件作为数据框导入R中,并且我已将感兴趣的列(AtollInservice$Antenna)指定为一个因素。

原始CSV文件在我感兴趣的列中具有以下格式:

COM_CVV65BSX-M\COM_CVV65BSX-M_2100_T02

正如您将注意到,在导入read.csv并使用head()函数时,我的原始文件中只有一个“\”,R似乎重复了反斜杠,如下所示:

> head(AtollInService$ANTENNA)
[1] COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 
    COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 
    COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02
[4] COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 
    COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 
    COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02

文件中字符串的开头有重复,我希望保留超出\或\的所有内容,以便COM是制造商,CVV65BSX-M是模型,2100是波段,T02是倾斜。

我尝试将Hadley Wickham的colsplit函数合并到转换函数中,但我不断被提示输入我无法破解的其他信息。

如果有人建议如何在原始数据框中拆分此特定列,我将很高兴收到您的回复。附件是指向我正在使用并希望拆分的数据样本的链接,特别是列“P”是有意义的。

这是我正在使用的数据框:

AtollInService <- with(Atoll, Atoll[!grepl("[_()]", NOMINAL_ID) & grepl("InService", MILESTONE) & grepl("^[A-Z][A-Z][0-9]{4}$", NOMINAL_ID) & !grepl("[L18]+[L08]", THREE_G_CELL_ID), ]) 

我可以在结束方括号和结束括号之后加入字符串拆分功能吗?

Sample Data

1 个答案:

答案 0 :(得分:1)

假设这是您的原始数据框(简化为两列来说明):

AtollInservice
#                                   ANTENNA MILESTONE
# 1 COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService
# 2 COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService
# 3 COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService
# 4 COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService
# 5 COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService
# 6 COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 NoService

以下是包含data.table包的选项,您可以非常轻松地过滤和创建新列,这假设ANTENNA列始终具有相同的格式,您可以定期使用tstrsplit表达式_|\\\\,它分为_\\,然后将最后四个元素作为列:

library(data.table)
(setDT(AtollInservice)[grepl("InService", MILESTONE)]
                     [, c("manufacturer", "model", "band", "tilt") := 
                        tstrsplit(ANTENNA, "_|\\\\")[3:6]][])

#                                   ANTENNA MILESTONE manufacturer      model band tilt
#1: COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService          COM CVV65BSX-M 2100  T02
#2: COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService          COM CVV65BSX-M 2100  T02
#3: COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService          COM CVV65BSX-M 2100  T02
#4: COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService          COM CVV65BSX-M 2100  T02
#5: COM_CVV65BSX-M\\COM_CVV65BSX-M_2100_T02 InService          COM CVV65BSX-M 2100  T02