我一直找不到一个很好的例子来说明如何通过整洁的select语法使用/c_across来选择包含多个字符串的变量。我发现str_detect工作得很好,但是它似乎不能在dplyr动词中工作?summarise的第一行在代码中有效,但我正在寻找正确的语法来查找第二行和第三行都包含子字符串的变量:
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"))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)
)发布于 2020-12-09 08:27:38
您可以在tidyselect函数上使用intersect() (和其他集合操作)和逻辑运算符:
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)
)或者:
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发布于 2020-12-09 08:15:46
您可以使用matches tidyselect函数。matches应用任意正则表达式来选择列。
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 2068https://stackoverflow.com/questions/65208818
复制相似问题