我的数据按V6中的ID分组,按位置排序(V1:V3):
dt
V1 V2 V3 V4 V5 V6
1: chr1 3054233 3054733 . + ENSMUSG00000090025
2: chr1 3102016 3102125 . + ENSMUSG00000064842
3: chr1 3205901 3207317 . - ENSMUSG00000051951
4: chr1 3206523 3207317 . - ENSMUSG00000051951
5: chr1 3213439 3215632 . - ENSMUSG00000051951
6: chr1 3213609 3216344 . - ENSMUSG00000051951
7: chr1 3214482 3216968 . - ENSMUSG00000051951
8: chr1 3421702 3421901 . - ENSMUSG00000051951
9: chr1 3466587 3466687 . + ENSMUSG00000089699
10: chr1 3513405 3513553 . + ENSMUSG00000089699
Run Code Online (Sandbox Code Playgroud)
我想要做的是添加一个带位置索引的额外列,也就是说,每个组在V6中第一个元素是"1",第二个元素是"2",依此类推.我可以使用ddply和自定义函数实现:
rankExons …Run Code Online (Sandbox Code Playgroud) 我有一个data.frame,其中每个基因名称都重复,并包含2个条件的值:
df <- data.frame(gene=c("A","A","B","B","C","C"),
condition=c("control","treatment","control","treatment","control","treatment"),
count=c(10, 2, 5, 8, 5, 1),
sd=c(1, 0.2, 0.1, 2, 0.8, 0.1))
gene condition count sd
1 A control 10 1.0
2 A treatment 2 0.2
3 B control 5 0.1
4 B treatment 8 2.0
5 C control 5 0.8
6 C treatment 1 0.1
Run Code Online (Sandbox Code Playgroud)
我想计算治疗后"计数"是否增加或减少,并将它们标记为和/或将它们分组.那是(伪代码):
for each unique(gene) do
if df[geneRow1,3]-df[geneRow2,3] > 0 then gene is "up"
else gene is "down"
Run Code Online (Sandbox Code Playgroud)
这应该是最终的样子(最后一列是可选的):
up-regulated
gene condition count sd regulation
B control 5 0.1 up …Run Code Online (Sandbox Code Playgroud) 我有一个命名的矢量列表,代表源自2个样本的事件,"A"和"B":
l.temp <- list(
SF1_t_A = c(rep(1:10)),
SF2_t_A = c(rep(9:15)),
SF1_t_B = c(rep(8:12)))
l.temp
$SF1_t_A
[1] 1 2 3 4 5 6 7 8 9 10
$SF2_t_A
[1] 9 10 11 12 13 14 15
$SF1_t_B
[1] 8 9 10 11 12
Run Code Online (Sandbox Code Playgroud)
现在我想只选择列表中的元素来自样本"A"或"B".我可以用循环来做这件事,但当plyr出现时,这种情况无法使用列表.这个和变化是我到目前为止所尝试的:
llply(l.temp , function(l){
if ((unlist(strsplit(names(l), "_"))[3]) == "A"){
return(l)}
})
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
Error in unlist(strsplit(names(l), "_")) :
error in evaluating the argument 'x' in selecting a method for function 'unlist':
Error in strsplit(names(l), "_") : non-character argument
Run Code Online (Sandbox Code Playgroud)
感谢我帮助我做错了什么.
我有一个大型数据集,287046 x 18,看起来像这样(仅部分表示):
tdf
geneSymbol peaks
16 AK056486 Pol2_only
13 AK310751 no_peak
7 BC036251 no_peak
10 DQ575786 no_peak
4 DQ597235 no_peak
5 DQ599768 no_peak
11 DQ599872 no_peak
12 DQ599872 no_peak
2 FAM138F no_peak
15 FAM41C no_peak
34116 GAPDH both
283034 GAPDH Pol2_only
6 LOC100132062 no_peak
9 LOC100133331 no_peak
14 LOC100288069 both
8 M37726 no_peak
3 OR4F5 no_peak
17 SAMD11 both
18 SAMD11 both
19 SAMD11 both
20 SAMD11 both
21 SAMD11 both
22 SAMD11 both
23 SAMD11 both
24 SAMD11 …Run Code Online (Sandbox Code Playgroud) 我有一个具有以下结构的数据框:
> dftest
element seqnames start end width strand tx_id tx_name
1 1 chr19 58858172 58864865 6694 - 36769 NM_130786
2 10 chr8 18248755 18258723 9969 + 16614 NM_000015
3 100 chr20 43248163 43280376 32214 - 37719 NM_000022
4 1000 chr18 25530930 25757445 226516 - 33839 NM_001792
5 10000 chr1 243651535 244006584 355050 - 4182 NM_181690
6 10000 chr1 243663021 244006584 343564 - 4183 NM_005465
1316 100302285 chr12 12264886 12264967 82 + 24050 NR_036052
1317 100302285 chr12 9392066 9392147 82 …Run Code Online (Sandbox Code Playgroud) 我有一个带通信密钥的文件 - >值:
sort keyFile.txt | head
ENSMUSG00000000001 ENSMUSG00000000001_Gnai3
ENSMUSG00000000003 ENSMUSG00000000003_Pbsn
ENSMUSG00000000003 ENSMUSG00000000003_Pbsn
ENSMUSG00000000028 ENSMUSG00000000028_Cdc45
ENSMUSG00000000028 ENSMUSG00000000028_Cdc45
ENSMUSG00000000028 ENSMUSG00000000028_Cdc45
ENSMUSG00000000031 ENSMUSG00000000031_H19
ENSMUSG00000000031 ENSMUSG00000000031_H19
ENSMUSG00000000031 ENSMUSG00000000031_H19
ENSMUSG00000000031 ENSMUSG00000000031_H19
Run Code Online (Sandbox Code Playgroud)
我想用temp.txt中的"value"替换"key"的每个对应关系:
head temp.txt
ENSMUSG00000000001:001 515
ENSMUSG00000000001:002 108
ENSMUSG00000000001:003 64
ENSMUSG00000000001:004 45
ENSMUSG00000000001:005 58
ENSMUSG00000000001:006 63
ENSMUSG00000000001:007 46
ENSMUSG00000000001:008 11
ENSMUSG00000000001:009 13
ENSMUSG00000000003:001 0
Run Code Online (Sandbox Code Playgroud)
结果应该是:
out.txt
ENSMUSG00000000001_Gnai3:001 515
ENSMUSG00000000001_Gnai3:002 108
ENSMUSG00000000001_Gnai3:003 64
ENSMUSG00000000001_Gnai3:004 45
ENSMUSG00000000001_Gnai3:005 58
ENSMUSG00000000001_Gnai3:006 63
ENSMUSG00000000001_Gnai3:007 46
ENSMUSG00000000001_Gnai3:008 11
ENSMUSG00000000001_Gnai3:009 13
ENSMUSG00000000001_Gnai3:001 0
Run Code Online (Sandbox Code Playgroud)
我在这个AWK示例之后尝试了一些变化但是你可以看到结果不是我的预期:
awk 'NR==FNR{a[$1]=$1;next}{$1=a[$1];}1' keyFile.txt temp.txt | …Run Code Online (Sandbox Code Playgroud) 我有一个大表,其中包含几个具有相关值的基因(newID)。有些基因(newID)是唯一的,有些有多个实例(出现在多行中)。如何从表中排除那些只出现一次(行)的内容?在下面的示例中,仅最后一行将被删除,因为它是唯一的。
head(exons.s, 10)
Row.names exonID pvalue log2fold.5_t.GFP_t. newID
1 ENSMUSG00000000001_Gnai3:E001 E001 0.3597070 0.029731989 ENSMUSG00000000001
2 ENSMUSG00000000001_Gnai3:E002 E002 0.6515167 0.028984837 ENSMUSG00000000001
3 ENSMUSG00000000001_Gnai3:E003 E003 0.8957798 0.009665072 ENSMUSG00000000001
4 ENSMUSG00000000001_Gnai3:E004 E004 0.5308266 -0.059273822 ENSMUSG00000000001
5 ENSMUSG00000000001_Gnai3:E005 E005 0.4507640 -0.061276835 ENSMUSG00000000001
6 ENSMUSG00000000001_Gnai3:E006 E006 0.5147357 -0.068357886 ENSMUSG00000000001
7 ENSMUSG00000000001_Gnai3:E007 E007 0.5190718 -0.063959853 ENSMUSG00000000001
8 ENSMUSG00000000001_Gnai3:E008 E008 0.8999434 0.032186993 ENSMUSG00000000001
9 ENSMUSG00000000001_Gnai3:E009 E009 0.5039369 0.133313175 ENSMUSG00000000001
10 ENSMUSG00000000003_Pbsn:E001 E001 NA NA ENSMUSG00000000003
> dim(exons.s)
[1] 234385 5
Run Code Online (Sandbox Code Playgroud)
对于 plyr 我会这样处理:
## remove single exon …Run Code Online (Sandbox Code Playgroud) 所以我使用ggplot2用我的数据制作一个漂亮的小图:
df1 <- data.frame(Background = factor(c("Input", "H3", "Overlap","Input", "H3", "Overlap"), levels=c("Input", "H3", "Overlap")),
Condition = factor(c("control", "control", "control","treatment", "treatment", "treatment")),
Count = c(10, 9, 5, 8, 7, 6))
barplot = ggplot(data=df1, aes(x=Condition, y=Count, fill=Background)) +
geom_bar(position=position_dodge()) +
facet_grid(. ~ Condition)
Run Code Online (Sandbox Code Playgroud)
我想把"控制"与"治疗"分开.我有点实现了这一点,但两者仍然在各个小组中表现出来:

怎么避免这个?
干杯.
我正在使用具有非常相似名称(df1、df2、.. df7)的 data.frames。由于大部分分析将全部完成,因此我希望尽可能使过程自动化。我已经设法在读取文件时使用assign:
for(i in 1:7) {
NameFile <- paste("df",i,"_10/score.out", sep="")
OutFile <- read.table(NameFile, na.string="NA",header=TRUE,sep="\t")
NameVar <- paste("df",i,"_10", sep="")
assign(NameVar, OutFile)
}
Run Code Online (Sandbox Code Playgroud)
但现在我也想在所有这些中执行操作/功能。例如子集:
for(i in 1:7) {
Newname <- paste("dfsmall",i,sep="")
dftemp <- subset(df[i], p == 0 & abs(sepscore) > 0.3)
assign(Newname, dftemp)
}
Run Code Online (Sandbox Code Playgroud)
我认为大部分是正确的,但我如何调用 df[i]?也就是说,已经存在名称为 df1, df2(..) 的对象?有没有更干净的方法来做到这一点?
这里有一些类似的问题,但没有一个适合我的问题。再说一次,我很容易错过显而易见的事情。
谢谢。