【问题标题】:R creating new column based on split column nameR根据拆分列名创建新列
【发布时间】:2017-07-29 17:18:37
【问题描述】:

我在尝试将数据框重新排列为长格式时遇到了问题。 我的桌子是这样的:

x <- data.frame("Accession"=c("AGI1","AGI2","AGI3","AGI4","AGI5","AGI6"),"wt_rep_1"=c(1,2,3,4,4,5), "wt_rep_2" = c(1,2,3,4,8,9), "mutant1_rep_1"=c(1,1,0,0,5,3), "mutant2_rep_1" = c(1,7,0,0,1,5), "mutant2_rep_2" = c(1,1,4,0,1,8) )

> x
  Accession wt_rep_1 wt_rep_2 mutant1_rep_1 mutant2_rep_1 mutant2_rep_2
1      AGI1        1        1             1             1             1
2      AGI2        2        2             1             7             1
3      AGI3        3        3             0             0             4
4      AGI4        4        4             0             0             0
5      AGI5        4        8             5             1             1
6      AGI6        5        9             3             5             8

我需要创建一个我将命名为“基因型”的列,它将包含“_”之前列名称的第一部分 如何使用 strsplit(names(x), "_") 为了那个原因? 最好是循环... 请任何人帮忙。

【问题讨论】:

  • 试试sub,即sub("_.*", "", names(x))

标签: r


【解决方案1】:

我将在两条指令中提取第一个_ 之前的x 的列名部分。请注意,它可以在一行中完成,但为了清楚起见,我这样发布。

sp <- strsplit(names(x), "_")
sapply(sp[-1], `[`, 1)

现在,这怎么可能是data.frame x 中的新专栏?结果向量中只有五个元素,x 有六行。

【讨论】:

    【解决方案2】:

    我同意 Ruy Barradas 的观点:我不明白这个向量如何成为您原始数据框的一部分。你能澄清一下吗?

    William Doane 对this question 的回复表明,使用正则表达式可能会奏效。我喜欢这种方法,因为我发现它既优雅又快速:

      > gsub("(_.*)$", "", names(x))[-1]
      [1] "wt"      "wt"      "mutant1" "mutant2" "mutant2"
    

    【讨论】:

    • &gt; x_long Accession genotype replicate value 1 AGI1 wt rep1 1 2 AGI1 wt rep2 2 3 AGI1 mutant1 rep1 3 4 AGI1 mutant1 rep2 4 长格式是我最终想要实现的。非常感谢您的提示!我的意思是,在长格式中,它仍然是同一张表,但已转置以供以后最简单的导航和使用。更多建议将非常非常受欢迎。
    • 对不起,我有格式问题 x_long x_long
    猜你喜欢
    • 2019-08-07
    • 2021-11-18
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    相关资源
    最近更新 更多