首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个变量的整洁select语法

多个变量的整洁select语法
EN

Stack Overflow用户
提问于 2020-12-09 08:09:37
回答 2查看 51关注 0票数 1

我一直找不到一个很好的例子来说明如何通过整洁的select语法使用/c_across来选择包含多个字符串的变量。我发现str_detect工作得很好,但是它似乎不能在dplyr动词中工作?summarise的第一行在代码中有效,但我正在寻找正确的语法来查找第二行和第三行都包含子字符串的变量:

代码语言:javascript
复制
dput(image[1,])
structure(list(Image = "B07", Match = 1, Stage = "pT2a N1", stage = "IIB", 
    `Molecular profile` = "WT", `Num Detections` = 686184, `Num CD68 (Opal 780)` = 19698, 
    `Num CD68 (Opal 780): FoxP3 (Opal 570)` = 425, `Num CD8 (Opal 480)` = 20576, 
    `Num CD8 (Opal 480): FoxP3 (Opal 570)` = 733, `Num CD8 (Opal 480): PD-1 (Opal 620)` = 4663, 
    `Num CD8 (Opal 480): PanCK (Opal 690)` = 7188, `Num FoxP3 (Opal 570)` = 5927, 
    `Num PD-1 (Opal 620)` = 12466, `Num PD-1 (Opal 620): CD68 (Opal 780)` = 928, 
    `Num PD-1 (Opal 620): FoxP3 (Opal 570)` = 740, `Num PD-L1 (Opal 520)` = 6809, 
    `Num PD-L1 (Opal 520): CD68 (Opal 780)` = 1903, `Num PD-L1 (Opal 520): PD-1 (Opal 620)` = 3655, 
    `Num PD-L1 (Opal 520): PD-1 (Opal 620): CD68 (Opal 780)` = 558, 
    `Num PD-L1 (Opal 520): PD-1 (Opal 620): FoxP3 (Opal 570)` = 306, 
    `Num PD-L1 (Opal 520): PanCK (Opal 690)` = 4462, `Num PD-L1 (Opal 520): PanCK (Opal 690): CD68 (Opal 780)` = 1570, 
    `Num PD-L1 (Opal 520): PanCK (Opal 690): PD-1 (Opal 620)` = 1417, 
    `Num PanCK (Opal 690)` = 296647, `Num PanCK (Opal 690): CD68 (Opal 780)` = 15629, 
    `Num PanCK (Opal 690): FoxP3 (Opal 570)` = 3845, `Num PanCK (Opal 690): PD-1 (Opal 620)` = 7433, 
    `Num PanCK (Opal 690): PD-1 (Opal 620): CD68 (Opal 780)` = 557, 
    `Num PanCK (Opal 690): PD-1 (Opal 620): FoxP3 (Opal 570)` = 286, 
    `Num CD8 (Opal 480): PD-L1 (Opal 520)` = 6252, `Num CD8 (Opal 480): PanCK (Opal 690): FoxP3 (Opal 570)` = 186, 
    `Num CD8 (Opal 480): CD68 (Opal 780)` = 1244, `Num CD8 (Opal 480): CD68 (Opal 780): FoxP3 (Opal 570)` = 58, 
    `Num CD8 (Opal 480): PD-1 (Opal 620): CD68 (Opal 780)` = 296, 
    `Num CD8 (Opal 480): PD-1 (Opal 620): CD68 (Opal 780): FoxP3 (Opal 570)` = 17, 
    `Num CD8 (Opal 480): PD-1 (Opal 620): FoxP3 (Opal 570)` = 215, 
    `Num CD8 (Opal 480): PD-L1 (Opal 520): CD68 (Opal 780)` = 614, 
    `Num CD8 (Opal 480): PD-L1 (Opal 520): FoxP3 (Opal 570)` = 322, 
    `Num CD8 (Opal 480): PD-L1 (Opal 520): PD-1 (Opal 620)` = 3454, 
    `Num CD8 (Opal 480): PD-L1 (Opal 520): PD-1 (Opal 620): CD68 (Opal 780)` = 358, 
    `Num CD8 (Opal 480): PD-L1 (Opal 520): PD-1 (Opal 620): FoxP3 (Opal 570)` = 213, 
    `Num CD8 (Opal 480): PD-L1 (Opal 520): PanCK (Opal 690)` = 2263, 
    `Num CD8 (Opal 480): PD-L1 (Opal 520): PanCK (Opal 690): CD68 (Opal 780)` = 249, 
    `Num CD8 (Opal 480): PD-L1 (Opal 520): PanCK (Opal 690): FoxP3 (Opal 570)` = 69, 
    `Num CD8 (Opal 480): PD-L1 (Opal 520): PanCK (Opal 690): PD-1 (Opal 620)` = 1763, 
    `Num CD8 (Opal 480): PD-L1 (Opal 520): PanCK (Opal 690): PD-1 (Opal 620): FoxP3 (Opal 570)` = 61, 
    `Num CD8 (Opal 480): PanCK (Opal 690): CD68 (Opal 780)` = 489, 
    `Num CD8 (Opal 480): PanCK (Opal 690): PD-1 (Opal 620)` = 2996, 
    `Num CD8 (Opal 480): PanCK (Opal 690): PD-1 (Opal 620): CD68 (Opal 780)` = 189, 
    `Num CD8 (Opal 480): PanCK (Opal 690): PD-1 (Opal 620): FoxP3 (Opal 570)` = 85, 
    `Num PD-1 (Opal 620): CD68 (Opal 780): FoxP3 (Opal 570)` = 43, 
    `Num PD-L1 (Opal 520): FoxP3 (Opal 570)` = 533, `Num PD-L1 (Opal 520): PanCK (Opal 690): CD68 (Opal 780): FoxP3 (Opal 570)` = 50, 
    `Num PanCK (Opal 690): CD68 (Opal 780): FoxP3 (Opal 570)` = 297, 
    `Num PanCK (Opal 690): PD-1 (Opal 620): CD68 (Opal 780): FoxP3 (Opal 570)` = 25, 
    `Num CD8 (Opal 480): PD-L1 (Opal 520): CD68 (Opal 780): FoxP3 (Opal 570)` = 32, 
    `Num CD8 (Opal 480): PD-L1 (Opal 520): PD-1 (Opal 620): CD68 (Opal 780): FoxP3 (Opal 570)` = 22, 
    `Num CD8 (Opal 480): PD-L1 (Opal 520): PanCK (Opal 690): CD68 (Opal 780): FoxP3 (Opal 570)` = 8, 
    `Num CD8 (Opal 480): PD-L1 (Opal 520): PanCK (Opal 690): PD-1 (Opal 620): CD68 (Opal 780)` = 210, 
    `Num CD8 (Opal 480): PD-L1 (Opal 520): PanCK (Opal 690): PD-1 (Opal 620): CD68 (Opal 780): FoxP3 (Opal 570)` = 13, 
    `Num CD8 (Opal 480): PanCK (Opal 690): CD68 (Opal 780): FoxP3 (Opal 570)` = 28, 
    `Num CD8 (Opal 480): PanCK (Opal 690): PD-1 (Opal 620): CD68 (Opal 780): FoxP3 (Opal 570)` = 6, 
    `Num PD-L1 (Opal 520): CD68 (Opal 780): FoxP3 (Opal 570)` = 80, 
    `Num PD-L1 (Opal 520): PD-1 (Opal 620): CD68 (Opal 780): FoxP3 (Opal 570)` = 39, 
    `Num PD-L1 (Opal 520): PanCK (Opal 690): FoxP3 (Opal 570)` = 238, 
    `Num PD-L1 (Opal 520): PanCK (Opal 690): PD-1 (Opal 620): CD68 (Opal 780)` = 291, 
    `Num PD-L1 (Opal 520): PanCK (Opal 690): PD-1 (Opal 620): CD68 (Opal 780): FoxP3 (Opal 570)` = 13, 
    `Num PD-L1 (Opal 520): PanCK (Opal 690): PD-1 (Opal 620): FoxP3 (Opal 570)` = 73), row.names = c(NA, 
-1L), class = c("tbl_df", "tbl", "data.frame"))
代码语言:javascript
复制
counts<- image %>%  rowwise(Image) %>% 
      summarise(
        "CD8"= sum(c_across(contains("CD8 ")), na.rm = TRUE),
        "CD8:PD-1"=sum(c_across(contains("CD8&PD-1")), na.rm = TRUE),
        "CD8:FoxP3"=sum(c_across(contains("CD8&FoxP3")), na.rm = TRUE)
      )
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-09 08:27:38

您可以在tidyselect函数上使用intersect() (和其他集合操作)和逻辑运算符:

代码语言:javascript
复制
image %>% 
  rowwise(Image) %>% 
  summarise(
    "CD8"= sum(c_across(contains("CD8 ")), na.rm = TRUE),
    "CD8:PD-1"=sum(c_across(intersect(contains("CD8"), contains("PD-1"))), na.rm = TRUE),
    "CD8:FoxP3"=sum(c_across(intersect(contains("CD8"), contains("FoxP3"))), na.rm = TRUE)
  )

或者:

代码语言:javascript
复制
image %>% 
  rowwise(Image) %>% 
  summarise(
    "CD8"= sum(c_across(contains("CD8 ")), na.rm = TRUE),
    "CD8:PD-1"=sum(c_across(contains("CD8") & contains("PD-1")), na.rm = TRUE),
    "CD8:FoxP3"=sum(c_across(contains("CD8") & contains("FoxP3")), na.rm = TRUE)
  )

`summarise()` regrouping output by 'Image' (override with `.groups` argument)
# A tibble: 1 x 4
# Groups:   Image [1]
  Image   CD8 `CD8:PD-1` `CD8:FoxP3`
  <chr> <dbl>      <dbl>       <dbl>
1 B07   54872      14561        2068
票数 0
EN

Stack Overflow用户

发布于 2020-12-09 08:15:46

您可以使用matches tidyselect函数。matches应用任意正则表达式来选择列。

代码语言:javascript
复制
image %>%  rowwise(Image) %>% 
  summarise("CD8"= sum(c_across(contains("CD8 ")), na.rm = TRUE),
            "CD8:PD-1"=sum(c_across(matches("(CD8|PD-1).+(CD8|PD-1)")), na.rm = TRUE),
            "CD8:FoxP3"=sum(c_across(matches("(CD8|FoxP3).+(CD8|FoxP3)")), na.rm = TRUE))
## A tibble: 1 x 4
## Groups:   Image [1]
#  Image   CD8 `CD8:PD-1` `CD8:FoxP3`
#  <chr> <dbl>      <dbl>       <dbl>
#1 B07   54872      14561        2068
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65208818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档