Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在两点之间拆分字符串列表_R_Regex_Stringr - Fatal编程技术网

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)