【发布时间】:2015-04-27 19:21:34
【问题描述】:
我有这个基本数据框:
我想在一列中搜索一个 SKU(8 位),将其放入一个变量(捕获组)中,然后将其放入一个新列中:“SKU_solo”。
我不需要“\1”,但需要前 8 位数字。如何在我的代码中创建捕获组?
这是我的代码:
我正在使用“dplyr”
urls_na <- urls_na %>%
mutate(SKU_solo = NA, #initialize the new column
SKU_solo = ifelse(grepl("([0-9]+)", Page), "\\1",SKU_solo))
Page Categoria Page.Views SKU_solo
1 5 /Cajon_Criolla_20141024 #N/A 7 \1
2 6 /Linon_20141115_20141130 #N/A 564 \1
3 7 /Cat/LIQUID #N/A 1 NA
4 8 /c_puertas_20141106_20141107 #N/A 34 \1
5 9 /C_Puertas_3_20141017_20141018 #N/A 2 \1
6 10 /c_puertas_navidad_20141204_20141205 #N/A 187319 \1
期望的输出:
Page Categoria Page.Views SKU_solo
1 5 /Cajon_Criolla_20141024 #N/A 7 20141024
2 6 /Linon_20141115_20141130 #N/A 564 20141115
3 7 /Cat/LIQUID #N/A 1 NA
4 8 /c_puertas_20141106_20141107 #N/A 34 20141106
5 9 /C_Puertas_3_20141017_20141018 #N/A 2 20141017
6 10 /c_puertas_navidad_20141204_20141205 #N/A 187319 20141204
注意事项:
1) ifelse 和 grepl 有助于进行捕获和替换。但是,它只是返回: \1 作为字符串。
2) 可能还有其他数字,如第 5 行。但重要的是第一个 SKU(8 位组)。
更新:
如您所见,我可以在 SKU_solo 列中打印“\1”。我知道还有其他方法可以做到这一点,但我的代码有什么问题?
我想使用 Regex 中的“捕获组”特性。我已经读过,当某物在“()”内时,它从左到右将值 1 分配给 ...。在我的代码中:ifelse(grepl("([0-9]+)", Page), "\\1",SKU_solo)) ... ([0-9]+) 应该是分配编号 1 ...这就是为什么在我使用:"\1" 来引用它之后。我不明白,为什么它不起作用,只在“SKU_solo”列中输入:“\1”。
【问题讨论】: