R根据拆分列名称创建新列

时间:2017-07-29 17:18:38

标签: r

我在尝试通过数据帧重新排列成长格式时遇到了问题。 我的表看起来像这样:

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

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

2 个答案:

答案 0 :(得分:2)

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

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

现在,如何在data.frame x中添加新列?结果向量中只有五个元素,x有六行。

答案 1 :(得分:0)

我同意Ruy Barradas:我不知道这个向量如何成为原始数据帧的一部分。你能澄清一下吗?

William Doane对this question的回应表明使用正则表达式可能会有所帮助。我喜欢这种方法,因为我发现它优雅而快速:

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