【问题标题】:Separate two words in r [closed]在r中分隔两个单词[关闭]
【发布时间】:2019-05-20 08:31:13
【问题描述】:

我有基因列表的data.frame。

样本数据——

gene_name "PPAP2C"
gene_name "PPaw2C"
gene_name "PAP2C"
gene_name "APAP2C"
gene_name "PP102C"

我想把这些数据分成两列

结果数据应该是 -

PPAP2C
PPaw2C
PAP2C
APAP2C
PP102C

我尝试使用--

xx = x4_1%>% separate(x4_1, c("A","B") , "  "  )

错误——

错误:var 必须计算为单个数字或列名,而不是列表 调用 rlang::last_error() 来查看回溯

【问题讨论】:

  • 你能发帖dput(x4_1)吗?
  • 对不起,我不能。因为当我尝试运行 dput() 时,它会给出一个与我的数据无关的日志列表。
  • 如果数据在数据框中。然后使用 dplyr::select() 函数选择一列。或者,您可以使用 dplyr::pull() 函数提取字符向量。
  • 我没有看到任何有用的使用 dplyr ::pull() 。我的数据在单列中。像gene_name“XYZ”,我希望结果中只有XYZ的data.frame。

标签: r dplyr plyr


【解决方案1】:

您的separate 方法对我有用:

library(tidyr)

df <- data.frame("genes" = c("gene_name \"PPAP2C\"",
                   "gene_name \"PPaw2C\"",
                   "gene_name \"PAP2C\"",
                   "gene_name \"APAP2C\"",
                   "gene_name \"PP102C\""), stringsAsFactors = FALSE)

> df
               genes
1 gene_name "PPAP2C"
2 gene_name "PPaw2C"
3  gene_name "PAP2C"
4 gene_name "APAP2C"
5 gene_name "PP102C"

df <- separate(df, genes, into = c("geneName", "geneCode"), sep = " ")

> df
   geneName geneCode
1 gene_name "PPAP2C"
2 gene_name "PPaw2C"
3 gene_name  "PAP2C"
4 gene_name "APAP2C"
5 gene_name "PP102C"

#Remove any special characters such as quotes:
df$geneCode <- gsub("[[:punct:]]", "", df$geneCode)

【讨论】:

  • 好的,我会检查为什么它不适合我。
  • 您能否进行一些修改,只给出不带引号的名称。例如 - 代替“PPAP2C”,我想要 PPAP2C。
  • 我已经进行了编辑以删除引号。
  • 非常感谢。单独的选项对我不起作用(无法跟踪错误),但我使用 -- rd = as.character(x4_1) s
【解决方案2】:

你快到了,函数的帮助(输入?separate 访问它)指定要给出的参数和示例。

library(dplyr)

tt <- c("PPAP2C",
"PPaw2C",
"PAP2C",
"APAP2C",
"PP102C")

tt <- paste0("gene_name", 1:5, " ", tt)
dframe <- tibble("col_to_split" = tt)
dframe %>% tidyr::separate(col = "col_to_split", into = c("col1", "col2"), sep = "\\s")

注意:如果您更多地处理字符串(显然 ^^),我建议查看包 stringr(操作)和 stringi(编码): http://edrub.in/CheatSheets/cheatSheetStringr.pdf

【讨论】:

    【解决方案3】:
    library(stringr)
    df <- data.frame("genes" = c("gene_name \"PPAP2C\"",
                                 "gene_name \"PPaw2C\"",
                                 "gene_name \"PAP2C\"",
                                 "gene_name \"APAP2C\"",
                                 "gene_name \"PP102C\""), stringsAsFactors = FALSE)
    
    df
    # genes
    # 1 gene_name "PPAP2C"
    # 2 gene_name "PPaw2C"
    # 3  gene_name "PAP2C"
    # 4 gene_name "APAP2C"
    # 5 gene_name "PP102C"
    
    df2 <- as.data.frame(str_split(string = df$genes, pattern = ' ', simplify = T))
    names(df2) <- c("geneName", "geneCode")
    df2$geneCode <- gsub(pattern = '"', replacement = '', x = df2$geneCode)
    # geneName geneCode
    # 1 gene_name   PPAP2C
    # 2 gene_name   PPaw2C
    # 3 gene_name    PAP2C
    # 4 gene_name   APAP2C
    # 5 gene_name   PP102C
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-11
      • 2016-10-07
      • 2016-12-19
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多