代码之家  ›  专栏  ›  技术社区  ›  monotonic

如何将格式为“col1+col3+col4”的数据帧的行名转换为一列数字向量“c(1,3,4)”?

  •  -1
  • monotonic  · 技术社区  · 1 年前

    如何将数据帧的行名称转换为格式 col1 + col3 + col4 变成一列数字矢量 c(1,3,4) ? 数据帧如下所示:

    dataframe

    我累了:

    > bel_bpa_df <- rownames_to_column(as.data.frame(bel_bpa), var = "SNPs") %>% 
    +   mutate(SNPs = str_split(SNPs, "\\+")) %>%
    +   mutate(SNPs = unlist(SNPs)) %>%
    +   mutate(SNPs = parse_number(SNPs))
    Error in `mutate()`:
    ! Problem while computing `SNPs = unlist(SNPs)`.
    ✖ `SNPs` must be size 30 or 1, not 4944.
    Run `rlang::last_error()` to see where the error occurred.
    

    但我不理解这个错误。为什么我不能使用unlist?有人能提供如何在更深层次上理解错误吗?i、 e.我对该软件包或R如何工作或Regex如何工作缺乏了解的原因是什么?我不是在寻找快速解决方案。

    1 回复  |  直到 1 年前
        1
  •  0
  •   Chris Ruehlemann    1 年前

    这是你需要的吗?

    library(dplyr)
    library(stringr)
    test %>% 
      rownames_to_column() %>%
      mutate(rowname = str_extract_all(rowname, "\\d+"))
       rowname v1 v2
    1 1, 3, 67  1  3
    2 4, 5, 77  3  4
    3    12, 6  5  9
    

    这里我们使用 str_extract 仅匹配和提取 d 列中的数字 rowname ; 逗号分隔符将自动添加到提取的列表中

    测试数据:

    test <- data.frame(v1 = c(1,3,5),
                       v2 = c(3,4,9))
    row.names(test) <- c("col1 + col3 + col67", "col4 + col5 + col77", "col12 + col6")
    

    编辑 :

    更长时间投射数据帧 行名称 ,从而能够将其转换为数字,使用 unnest_longer :

    test %>% 
      rownames_to_column() %>%
      mutate(rowname = str_extract_all(rowname, "\\d+")) %>% 
      unnest_longer(rowname) %>%
      mutate(rowname = as.numeric(rowname))
    # A tibble: 8 × 3
      rowname    v1    v2
        <dbl> <dbl> <dbl>
    1       1     1     3
    2       3     1     3
    3      67     1     3
    4       4     3     4
    5       5     3     4
    6      77     3     4
    7      12     5     9
    8       6     5     9