【问题标题】:Determine whether content the same across several different variables确定多个不同变量的内容是否相同
【发布时间】:2020-10-19 18:22:47
【问题描述】:

这是我正在处理的一小部分数据:

 data<-structure(list(record_id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 
12, 13, 14, 15, 16, 17, 18, 19), fracture1_lateral___1 = c(0, 
1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0), fracture1_medial___1 = c(0, 
0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0), fracture1px_lateral___1 = c(0, 
1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), fracture1px_medial___1 = c(0, 
0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0)), class = c("spec_tbl_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -19L), spec = structure(list(
    cols = list(record_id = structure(list(), class = c("collector_double", 
    "collector")), fracture1_lateral___1 = structure(list(), class = c("collector_double", 
    "collector")), fracture1_medial___1 = structure(list(), class = c("collector_double", 
    "collector")), fracture1px_lateral___1 = structure(list(), class = c("collector_double", 
    "collector")), fracture1px_medial___1 = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1L), class = "col_spec"))

这是它最初来自的输入的屏幕截图,每个复选框都成为自己的列:

我想确定是否有人检查了每个表单上的“相同”输出。 IE。如果他们在一个表格上点击“右髁”,他们也会在另一个表格上点击它,就像这张照片:

在我的数据中,我知道这段代码可以通过创建一个 TRUE/FALSE 的新变量来为我做到这一点,以判断这两个变量是否表示相同的内容(这就是我想要的):

data<-data%>%mutate(Same=(fracture1_medial___1==fracture1px_medial___1))

我的问题是,我需要在多个位置检查该变量,并且有一些特殊规则:

在那张照片中,有 4 个地方写着“右髁”,我需要知道的是:如果点击了左侧的任何一个框,那么是否至少点击了右侧的一个框? IE。如果我们注意到这张照片中的场景:

“fracture1_lateral_1”和“fracture1px_medial”都被点击了,这很好,会导致“TRUE”,但下面的“fracture1px_medial”和“fracture1px_lateral”的情况将是FALSE。

可能有 10 个“右髁”变量要比较(每边 5 个),但例如在这张照片中,“右髁”变量是:

data$fracture1_medial_1, data$fracture1_lateral_1, data$fracture1px_medial_1, data$fracture1px_lateral_1

根据@Ben 的评论进行编辑以进行澄清:
我最终想要的是这个专栏:

在那张照片中,您可以看到,如果在左侧两列中的至少一列和右侧两列中的至少一列中找到“1”,则结果为“是”,或者如果全部为零穿过它的方式是“是”,但如果左侧或右侧只有“1”......它是“否”

有什么解决办法吗? Tidyverse 会更好,因为我已经习惯了。

【问题讨论】:

  • 看起来您正在使用 REDCap 复选框。是否有可能开发一个很好的按比例缩小的示例起始数据框架(可能建立在帖子中包含的数据基础上,但这也演示了“在多个位置检查变量”和“特殊规则”)?也许想出一个“期望的最终结果数据框架”来展示您想对原始数据进行编码,以及最终结果应该是什么样子?然后,也许可以得出一个普遍的答案。
  • @Ben 我希望评论有助于澄清,感谢您花时间考虑。

标签: r tidyverse


【解决方案1】:

这是tidyverse 方法。

首先,将数据转换为长格式。这将有助于查看相似的组和子组,并且在分析相似数据时可以灵活地满足不同的需求。

在长格式中,您可以group_by 每行或record_id,并使用适当的逻辑。在这种情况下,您正在查看“px”和没有“px”的“内侧”和“外侧”。逻辑已写出,但也可以考虑使用any 或其他方式的捷径。

创建一个因子来将TRUEFALSE 转换为“是”和“否”。最终的right_join 会将新列结果连接到您的原始数据。

library(tidyverse)

data %>%
  pivot_longer(cols = -record_id, 
               names_to = c("number1", "location", "number2"), 
               names_pattern = "^fracture(\\d+)(\\w+)___(\\d+)") %>%
  separate(location, into = c("px", "location"), sep = "_", remove = TRUE) %>%
  group_by(record_id) %>%
  summarise(same = ifelse((value[px == "" & location == "lateral"] | 
                           value[px == "" & location == "medial"]) ==
                          (value[px == "px" & location == "lateral"] |
                           value[px == "px" & location == "medial"]), "Yes", "No")) %>%
  right_join(data)

输出

   record_id same  fracture1_lateral___1 fracture1_medial___1 fracture1px_lateral___1 fracture1px_medial___1
       <dbl> <chr>                 <dbl>                <dbl>                   <dbl>                  <dbl>
 1         1 Yes                       0                    0                       0                      0
 2         2 Yes                       1                    0                       1                      0
 3         3 Yes                       1                    0                       0                      1
 4         4 Yes                       0                    1                       1                      0
 5         5 Yes                       0                    1                       0                      1
 6         6 No                        0                    0                       1                      1
 7         7 No                        1                    1                       0                      0
 8         8 Yes                       0                    0                       0                      0
 9         9 Yes                       0                    0                       0                      0
10        10 No                        1                    1                       0                      0
11        11 Yes                       0                    0                       0                      0
12        12 Yes                       0                    0                       0                      0
13        13 Yes                       0                    0                       0                      0
14        14 Yes                       0                    0                       0                      0
15        15 Yes                       0                    1                       0                      1
16        16 Yes                       0                    0                       0                      0
17        17 Yes                       0                    0                       0                      0
18        18 Yes                       0                    0                       0                      0
19        19 Yes                       0                    0                       0                      0

数据

data <- structure(list(record_id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 
12, 13, 14, 15, 16, 17, 18, 19), fracture1_lateral___1 = c(0, 
1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0), fracture1_medial___1 = c(0, 
0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0), fracture1px_lateral___1 = c(0, 
1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), fracture1px_medial___1 = c(0, 
0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0)), row.names = c(NA, 
-19L), class = c("tbl_df", "tbl", "data.frame"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 2018-09-25
    • 2013-12-28
    • 1970-01-01
    • 2011-11-09
    相关资源
    最近更新 更多