我在尝试通过数据帧重新排列成长格式时遇到了问题。 我的表看起来像这样:
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), "_")
为了那个原因?
最好是循环......
拜托,任何人,帮助。
答案 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"