【问题标题】:R Script Power Query: New character column read as numbers in Power BIR Script Power Query:在 Power BI 中读取为数字的新字符列
【发布时间】:2020-07-18 21:41:09
【问题描述】:

我正在使用 Power BI 创建报表,但我正在 Power Query 编辑器中的 R 脚本中进行数据清理,因为我无法想象如何在 DAX 中执行此操作。出于某种原因,我创建的一个新字符列被读取为数字,类似于将因子级别读取为整数时会发生的情况。这是一些示例数据。

+-----------+-------------------------+-----------------------------------+
| PatientId |       LabTestName       |           LabTestResult           |
+-----------+-------------------------+-----------------------------------+
|         1 | Veritor Rapid Influenza | NEGATIVE TYPE A / NEGATIVE TYPE B |
|         1 | Veritor Rapid Strep     | Cancelled                         |
|         1 | NA                      | NA                                |
|         2 | NA                      | NA                                |
|         3 | Veritor Rapid Strep     | Negative                          |
|         3 | SARS CoV 2 RNA, RT PCR  | NOT DETECTED                      |
+-----------+-------------------------+-----------------------------------+

一些示例代码:

x %>%
  group_by(PatientId) %>%
  mutate(
    CoV_Tested = any(!is.na(LabTestName) & str_detect(LabTestName, "CoV")),
    CoV_Result = ifelse(
      CoV_Tested, unique(LabTestResult[!is.na(LabTestName) & str_detect(LabTestName, "CoV")]), NA
    )
  ) %>%
  distinct(PatientId, CoV_Tested, CoV_Result)

在下面的结果表中,Power BI 将 CoV_Tested 读取为符合逻辑的,但 CoV_Result 读取为文本。

+-----------+------------+--------------+
| PatientId | CoV_Tested |  CoV_Result  |
+-----------+------------+--------------+
|         1 |   FALSE    | <NA>         |
|         2 |   FALSE    | <NA>         |
|         3 |    TRUE    | NOT DETECTED |
+-----------+------------+--------------+

“未检测到”的值被读取为 4。我已经用我的大型数据集和这个较小的示例复制了这个。我也不能只告诉 Power BI 将数据类型更改为“文本”,因为它只是将 4 更改为“4”(即,将数字“4”更改为文本“4”)。我可能只是能够转换 Power BI 中的列以用实际文本替换数字,但这是一个不需要的步骤,如果有很多唯一值会很麻烦。

任何帮助将不胜感激!谢谢!

【问题讨论】:

    标签: r powerbi powerbi-desktop


    【解决方案1】:

    我不确定为什么它会像这样与 R 交互,但在自定义列的帮助下仅在 M 中执行此操作并不难。

    #"Added Custom" = Table.AddColumn(#"Previous Step",
        "CoV", each if [LabTestName] <> null and Text.Contains([LabTestName], "CoV")
                    then [LabTestResult] else null, type text),
    #"Grouped Rows" = Table.Group(#"Added Custom",
        {"PatientId"},
        {{"CoV_Tested", each List.MatchesAny([CoV], each _ <> null), type logical},
         {"CoV_Result", each List.First(List.Select([CoV], each _ <> null)), type text}})
    

    【讨论】:

    • 所以我今天第一次听说 M,除此之外我还需要进行其他转换,所以我试图将解决方案保留在 R 中。字符列似乎是一个巨大的疏忽被转换为整数(使 R 脚本无用),所以我希望其他人以前见过这个。
    • 是的,如果您对 R 更熟悉的话,这绝对不是一个通用的解决方案或很好,但查询编辑器 M 语言对于不涉及花哨的建模或统计的基本转换非常好。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    相关资源
    最近更新 更多