我试图在注释列表上使用dplyr函数case_when(),以便将标记的名称指定给我的数据.我已经找到了一种手动完成这项工作的方法,写了好几次,但我try 用apply或map将其应用到列表中,但没有找到解决方案.

以下是一个可复制的示例:

library(tidyverse)
annotation <- list (marker_1 = c("L", "D"),
                    marker_2 = c("C","R"),
                    marker_3 = c("A", "B"),
                    marker_4 = c("E", "F"),
                    marker_5 = c("G", "H"))


df <- tibble(L = 1, D = 2, C = 3, R = 4)


annotation_df <-
  tibble(markers = colnames(df)) %>%
  mutate(
    type = case_when(
      markers %in% annotation[[1]] ~ names(annotation[1]),
      markers %in% annotation[[2]] ~ names(annotation[2]),
      markers %in% annotation[[3]] ~ names(annotation[3]),
      markers %in% annotation[[4]] ~ names(annotation[4]),
      markers %in% annotation[[5]] ~ names(annotation[5])
    )
  ) %>%
  column_to_rownames("markers")
print(annotation_df)
#>       type
#> L marker_1
#> D marker_1
#> C marker_2
#> R marker_2

reprex package(v2.0.1)于2022年4月25日创建

推荐答案

case_when不同,更简单的 Select 是在将命名的list转换为带有(tibble::enframe)的两列tibble后进行连接

library(dplyr)
library(tidyr)
library(tibble)
enframe(annotation, name = 'type', value = 'markers') %>% 
   unnest(markers) %>%
    right_join(tibble(markers = colnames(df))) %>%
   relocate(type, .after = 'markers')

-输出

# A tibble: 4 × 2
  markers type    
  <chr>   <chr>   
1 L       marker_1
2 D       marker_1
3 C       marker_2
4 R       marker_2

或者另一种观点是循环list个元素,获取intersecting元素,并将命名列表转换为tibble

library(purrr)
map(annotation, ~ intersect(names(df), .x)) %>%
  keep(lengths(.) > 0) %>%
  enframe(name = 'markers', value = 'type') %>%
  unnest(type)

或者用base Rlapplystack

lapply(annotation, \(x) intersect(names(df), x)) |>
    Filter(length, x = _) |>
    stack() |> 
    setNames(c("markers", "type")) |>
    subset(select = 2:1)

-输出

      type markers
1 marker_1       L
2 marker_1       D
3 marker_2       C
4 marker_2       R

R相关问答推荐

x[[1]]中的错误:脚注越界

名称输出pmap on tible

如何自定义Shapviz图?

R中的子集文件—读取文件名索引为4位数字序列,例如0001到4000,而不是1到4000)

Highcharter多次钻取不起作用,使用不同方法

ggplot2中的X轴显示数值,单位为百,而不是十

用相同方法得到不同函数的ROC最优截断值

如何优化向量的以下条件赋值?

Ggplot2中的重复注记

根据元素和前一个值之间的差值过滤矩阵的元素

plotly hover文本/工具提示在shiny 中不起作用

基于数据集属性将科分配给物种

将多个变量组合成宽格式

提高圣彼得堡模拟的速度

如何从嵌套数据中自动创建命名对象?在R中

如何在内联代码中添加额外的空格(R Markdown)

如何将字符类对象中的数据转换为R中的字符串

Ggplot2水平线和垂直线的图例图标不匹配

如何根据分位数及其值创建格式化字符串值的数组?

R+MICESS:我想编写一个函数,用于在补偿后从MICES MIDS对象中提取信息