R/Power查询:将值替换为匹配值
我正试图清理一个巨大数据集中的一些数据。 其中一列保存Sales aamount的值。示例值可以如下所示: 清洁数据:R/Power查询:将值替换为匹配值,r,regex,powerbi,substring,powerquery,R,Regex,Powerbi,Substring,Powerquery,我正试图清理一个巨大数据集中的一些数据。 其中一列保存Sales aamount的值。示例值可以如下所示: 清洁数据: 销售潜力 230 120 300 但是,在某些情况下会出现如下情况: 脏数据 0,0,0,0,0,0 4,0,0,0 0,0480 02000,0 在脏数据的第一种情况下,单元格应仅包含零:0 在所有其他情况下,如果有任何非零数字,我希望提取该数字,并用该值替换单元格或添加新的已清除列 因此,脏数据被清除: 清理数据: 0 4 480 200 我的方法是在R中使用RegExpr
销售潜力
230
120
300
但是,在某些情况下会出现如下情况:
脏数据
0,0,0,0,0,0
4,0,0,0
0,0480
02000,0
在脏数据的第一种情况下,单元格应仅包含零:0
在所有其他情况下,如果有任何非零数字,我希望提取该数字,并用该值替换单元格或添加新的已清除列
因此,脏数据被清除:
清理数据:
0
4
480
200
我的方法是在R
中使用RegExpressions,因为我使用powerquery将数据加载到powerbi中。
我试图找到一种模式,从中提取我要查找的值,并将其放在一个新列中。然而,我的结果看起来没什么。
在R
中是否有更简单的方法来实现这一点
迄今为止的代码:
图书馆(stringr)
OutputRegEx此R
解决方案似乎可以满足您的需求:
SalesPotential <- c("0, 0, 0, 0, 0", "4, 0, 0, 0","0, 0, 480","0, 200, 0")
library(stringr)
str_extract(gsub(",", "", SalesPotential), "(?=(0\\s){4})\\d+|[1-9]+(0{1,})?")
[1] "0" "4" "480" "200"
此R
解决方案似乎满足了您的需求:
SalesPotential <- c("0, 0, 0, 0, 0", "4, 0, 0, 0","0, 0, 480","0, 200, 0")
library(stringr)
str_extract(gsub(",", "", SalesPotential), "(?=(0\\s){4})\\d+|[1-9]+(0{1,})?")
[1] "0" "4" "480" "200"
那么,您可以通过使用M-formula语言或GUI本身在Power Query本身中实现所需的结果
让我告诉你最简单的方法
如果我是正确的,那么该列有一些干净的数字和一些逗号分隔的数字
所以你要做的是
对于每种情况,用逗号拆分列
因此,如果任何单元格中的最大comman数为“n”,则将得到(n+1)-列数
现在,您必须创建一个条件列来检查所有这些列中大于零的数字并给出输出
Bhmy这样做,您将在脏数据的计算列中获得非零数字,而清理数据的计算列中获得相同的数字
完成此操作后,可以删除所有以逗号分隔的列,并仅保留条件列
现在,公式应如下所示:
if delcol1 <> 0 then delcol1 elseif delcol2 <> 0 then delcol2 elseif.......
如果delcol1 0,则delcol1 elseif delcol2 0,则delcol2 elseif。。。。。。。
delcol2 0然后是delcoln
这是我能想到的解决问题的最简单方法
但是,也有其他方法可以获得相同的答案。好的,您可以使用M-formula语言或GUI本身在Power Query中获得所需的结果
让我告诉你最简单的方法
如果我是正确的,那么该列有一些干净的数字和一些逗号分隔的数字
所以你要做的是
对于每种情况,用逗号拆分列
因此,如果任何单元格中的最大comman数为“n”,则将得到(n+1)-列数
现在,您必须创建一个条件列来检查所有这些列中大于零的数字并给出输出
Bhmy这样做,您将在脏数据的计算列中获得非零数字,而清理数据的计算列中获得相同的数字
完成此操作后,可以删除所有以逗号分隔的列,并仅保留条件列
现在,公式应如下所示:
if delcol1 <> 0 then delcol1 elseif delcol2 <> 0 then delcol2 elseif.......
如果delcol1 0,则delcol1 elseif delcol2 0,则delcol2 elseif。。。。。。。
delcol2 0然后是delcoln
这是我能想到的解决问题的最简单方法
但是,也有其他方法可以获得相同的答案。在Powerquery中,插入一个带有以下公式的自定义列
=List.Max(List.Transform(Text.Split(Text.From([Sales Potential]),","), each Number.FromText(_)))
该公式将所有内容拆分为逗号,放入一个列表中,将列表从文本转换为数字,然后从列表中获取最大数字。在Powerquery中,插入一个带有以下公式的自定义列
=List.Max(List.Transform(Text.Split(Text.From([Sales Potential]),","), each Number.FromText(_)))
该公式将所有内容拆分为逗号,放入列表,将列表从文本转换为数字,然后从列表中获取最大数字