小编fri*_*day的帖子

使用data.table为组的每个元素创建"索引"

我的数据按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)

indexing r bioinformatics plyr data.table

11
推荐指数
1
解决办法
3621
查看次数

计算数据帧中连续行对之间的差值 - R.

我有一个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)

r

5
推荐指数
1
解决办法
1956
查看次数

根据名称选择列表元素

我有一个命名的矢量列表,代表源自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)

感谢我帮助我做错了什么.

r list

5
推荐指数
1
解决办法
3025
查看次数

如何按组拆分数据表并在列中按出现次数使用子集?

我有一个大型数据集,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)

split r subset plyr data.table

5
推荐指数
1
解决办法
4991
查看次数

使用ddply排除某些列中的重复值

我有一个具有以下结构的数据框:

> 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)

r duplicates plyr

4
推荐指数
1
解决办法
614
查看次数

通过匹配模式用另一个文本文件中的行替换字符串

我有一个带通信密钥的文件 - >值:

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)

regex perl awk sed

4
推荐指数
1
解决办法
768
查看次数

使用 data.table 选择非唯一行

我有一个大表,其中包含几个具有相关值的基因(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)

r unique subset data.table

3
推荐指数
1
解决办法
571
查看次数

如何阻止ggplot2 facet复制变量?

所以我使用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)

我想把"控制"与"治疗"分开.我有点实现了这一点,但两者仍然在各个小组中表现出来:

在此输入图像描述

怎么避免这个?

干杯.

r facet ggplot2

1
推荐指数
1
解决办法
226
查看次数

在 R 中使用循环调用函数中具有相似名称的对象

我正在使用具有非常相似名称(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(..) 的对象?有没有更干净的方法来做到这一点?

这里有一些类似的问题,但没有一个适合我的问题。再说一次,我很容易错过显而易见的事情。

谢谢。

for-loop r object

0
推荐指数
1
解决办法
2540
查看次数

标签 统计

r ×8

data.table ×3

plyr ×3

subset ×2

awk ×1

bioinformatics ×1

duplicates ×1

facet ×1

for-loop ×1

ggplot2 ×1

indexing ×1

list ×1

object ×1

perl ×1

regex ×1

sed ×1

split ×1

unique ×1