R 在两点之间拆分字符串列表
R 在两点之间拆分字符串列表,r,regex,stringr,R,Regex,Stringr,c(“1x西红柿1kg R16”、“1x牡蛎蘑菇R20”、“1x土豆1kg R15”) 我有一个像这样的长列表,我需要在每个字符串中的x和R之间分割字符串,这样当我创建一个数据帧时,我可以有相等数量的列,我不能只按空格分割,因为列表中的每个项目不是两个字的乘积,其中一些是2-4个字的长度,所以按空格分割是不可能的会有用的 编辑: 这是实际的文件,我试着过滤掉一些无用的单词,这样我就可以制作一个数据帧 1x Tomatoes 1kg for R 16 each 1x Oyster Mushroom
c(“1x西红柿1kg R16”、“1x牡蛎蘑菇R20”、“1x土豆1kg R15”)
我有一个像这样的长列表,我需要在每个字符串中的x
和R
之间分割字符串,这样当我创建一个数据帧时,我可以有相等数量的列,我不能只按空格分割,因为列表中的每个项目不是两个字的乘积,其中一些是2-4个字的长度,所以按空格分割是不可能的会有用的
编辑:
这是实际的文件,我试着过滤掉一些无用的单词,这样我就可以制作一个数据帧
1x Tomatoes 1kg for R 16 each
1x Oyster Mushroom for R 20 each
1x Potatoes 1 kg for R 15 each
1x Stirfry 400g for R 20 each
2x Red apples 4 medium for R 10 each
1x beef Fillet Steak 300g for R 54 each
1x Beef Rump Steak 300g for R 45 each
1x Back Bacon 200g for R 30 each
1x Gouda 1kg for R 130 each
1x Chicken flattie lemon and herb for R 85 each
2x Lean Beef Mince for R 54 each
我知道模式列表是无用的,这是一个大混乱,但谢谢你的帮助
我现在在想,把x
和R
分开并不是最好的,因为其他产品都有资本R
,试试这个
chr <- c("1x Tomatoes 1kg R 16", "1x Oyster Mushroom R 20", "1x Potatoes 1 kg R 15")
strsplit(chr, "(?<=x) | (?=R)", perl = TRUE)
输出
V1 V2 V3
1 1x Tomatoes 1kg R 16
2 1x Oyster Mushroom R 20
3 1x Potatoes 1 kg R 15
4 1x Stirfry 400g R 20
5 2x Red apples 4 medium R 10
6 1x beef Fillet Steak 300g R 54
7 1x Beef Rump Steak 300g R 45
8 1x Back Bacon 200g R 30
9 1x Gouda 1kg R 130
10 1x Chicken flattie lemon and herb R 85
11 2x Lean Beef Mince R 54
更新:如果您总是使用“for R…”,则将下面的方法更改为
匹配这应该可以工作(所有都使用base R):
x你能提供你的预期产出吗?[1]“1x”、“西红柿1kg”、“R16”我这样做了,但现在它在字符串中的R
上拆分了“牛肉屁股牛排”
这样的项目,有没有办法只将其作为大写字母R,因为产品列表中唯一的大写字母R是兰特symbol@Noodle18嗨,我不能重现这个问题。你使用的是最新版本的R吗?我使用的是R4.02,但我会快速编辑,并用编辑快速向你展示我的整个过程,这看起来非常愚蠢,但我仍在学习,所以请容忍我。非常感谢你,我今天肯定学到了很多,也感谢大家。
as.data.frame(do.call(rbind, strsplit(sub(" each$", "", vec), "(?<=\\dx) | for ", perl = TRUE)))
> vec
[1] "1x Tomatoes 1kg for R 16 each" "1x Oyster Mushroom for R 20 each" "1x Potatoes 1 kg for R 15 each"
[4] "1x Stirfry 400g for R 20 each" "2x Red apples 4 medium for R 10 each" "1x beef Fillet Steak 300g for R 54 each"
[7] "1x Beef Rump Steak 300g for R 45 each" "1x Back Bacon 200g for R 30 each" "1x Gouda 1kg for R 130 each"
[10] "1x Chicken flattie lemon and herb for R 85 each" "2x Lean Beef Mince for R 54 each"
V1 V2 V3
1 1x Tomatoes 1kg R 16
2 1x Oyster Mushroom R 20
3 1x Potatoes 1 kg R 15
4 1x Stirfry 400g R 20
5 2x Red apples 4 medium R 10
6 1x beef Fillet Steak 300g R 54
7 1x Beef Rump Steak 300g R 45
8 1x Back Bacon 200g R 30
9 1x Gouda 1kg R 130
10 1x Chicken flattie lemon and herb R 85
11 2x Lean Beef Mince R 54
x <- c("1x Tomatoes 1kg R 16", "1x Oyster Mushroom R 20", "1x Potatoes 1 kg R 15")
x <- t(matrix(unlist(x = strsplit(x = unlist(strsplit(x,
split = ' R ')),
split = 'x ')),
ncol = 3))
x <- as.data.frame(x)