我有一个包含数百万行和一列文本的表,正好是11,159个字符.它看起来像这样:
1202012101...(to 11,159 characters)
1202020120...
0121210212...
...
(to millions of rows)
Run Code Online (Sandbox Code Playgroud)
我意识到我可以使用
SELECT SUBSTR(column,2,4) FROM table;
Run Code Online (Sandbox Code Playgroud)
...如果我想拉出字符2,3,4和5:
1202012101...
1202020120...
0121210212...
^^^^
Run Code Online (Sandbox Code Playgroud)
但我需要提取不连续的字符,例如字符1,5,7:
1202012101...
1202020120...
0121210212...
^ ^ ^
Run Code Online (Sandbox Code Playgroud)
我意识到这可以通过以下查询来完成:
SELECT CONCAT(SUBSTR(colm,1,1),SUBSTR(colm,5,1),SUBSTR(colm,7,1)) FROM table;
Run Code Online (Sandbox Code Playgroud)
但是这个查询变得非常难以构建我需要选择的数千个字符.所以对于问题的第一部分 - 我如何构建一个类似这样的查询:
SELECT CHARACTERS(string,1,5,7) FROM table;
Run Code Online (Sandbox Code Playgroud)
此外,我想要选择的字符的索引来自不同的表,看起来像这样:
char_index keep_or_discard
1 keep
2 discard
3 discard
4 discard
5 keep
7 discard
8 keep
9 discard
10 discard
Run Code Online (Sandbox Code Playgroud)
因此,对于问题的第二部分,我如何根据第二个表中该字符索引的keep_or_discard ="keep"来构建查询以从第一个表中选择特定字符?
我熟悉linux中的split命令.如果我有一个100行长的文件,
split -l 5 myfile.txt
Run Code Online (Sandbox Code Playgroud)
...将myfile.txt拆分为20个文件,每个文件有5行,并将它们写入文件.
我的问题是,我想通过专栏来做这件事.给定一个包含100列的文件,制表符分隔,是否有类似的命令将此文件拆分为20个较小的文件,每个文件有5列和所有行?
我知道如何使用剪切,但我希望有一个简单的UNIX命令,我从来没有听说过,如果不用perl或其他东西包裹剪切就可以实现这一点.
提前致谢.
我有三个文件,每个文件都有一个ID和一个值.
sdt5z@fir-s:~/test$ ls
a.txt b.txt c.txt
sdt5z@fir-s:~/test$ cat a.txt
id1 1
id2 2
id3 3
sdt5z@fir-s:~/test$ cat b.txt
id1 4
id2 5
id3 6
sdt5z@fir-s:~/test$ cat c.txt
id1 7
id2 8
id3 9
Run Code Online (Sandbox Code Playgroud)
我想创建一个看起来像这样的文件......
id1 1 4 7
id2 2 5 8
id3 3 6 9
Run Code Online (Sandbox Code Playgroud)
...最好使用单个命令.
我知道连接和粘贴命令.粘贴将每次复制id列:
sdt5z@fir-s:~/test$ paste a.txt b.txt c.txt
id1 1 id1 4 id1 7
id2 2 id2 5 id2 8
id3 3 id3 6 id3 9
Run Code Online (Sandbox Code Playgroud)
加入效果很好,但一次只有两个文件:
sdt5z@fir-s:~/test$ join a.txt b.txt
id1 1 4
id2 …Run Code Online (Sandbox Code Playgroud) 我正在使用cor.prob()函数,该函数已在邮件列表周围多次发布,以获得相关矩阵(下对角线)和p值(上对角线):
cor.prob <- function (X, dfr = nrow(X) - 2) {
R <- cor(X)
above <- row(R) < col(R)
r2 <- R[above]^2
Fstat <- r2 * dfr/(1 - r2)
R[above] <- 1 - pf(Fstat, 1, dfr)
R[row(R) == col(R)] <- NA
R
}
d <- data.frame(x=1:5, y=c(10,16,8,60,80), z=c(10,9,12,2,1))
cor.prob(d)
> cor.prob(d)
x y z
x NA 0.04856042 0.107654038
y 0.8807155 NA 0.003523594
z -0.7953560 -0.97945703 NA
Run Code Online (Sandbox Code Playgroud)
如何将上述相关矩阵(下半部分的相关性,上半部分的p值)折叠成四列矩阵:两个指标,相关性和p值?例如:
i j cor pval
x y .88 .048
x z -.79 .107
y …Run Code Online (Sandbox Code Playgroud) 我正在尝试收集两个不同变量的数据,每个变量分布在几个列上,并由另外两个变量分组.这是问题所在.我有几个基因,几个样本.每个样本具有三种不同的可能基因型,每种基因型具有相关的频率.我想整理这个以获得基因,样本,基因型,频率的单一列.
我有一个hackjob解决方案,涉及创建listcolumns,传播它们,然后使用purrr :: map函数提取列.它很丑陋,不是真正的可扩展性,频率在转换回数字之前转换为字符,不理想.
有没有更好的方法来解决这个问题?
library(tidyverse)
# or, separately load dplyr, tibble, tidyr, purrr
# Here's what I have
have <- data_frame(gene=rep(c("gX", "gY"), each=2),
sample=rep(c("s1", "s2"), 2),
genotype1=c("AA", "AA", "GG", "GG"),
genotype2=c("AC", "AC", "GT", "GT"),
genotype3=c("CC", "CC", "TT", "TT"),
freq1=c(.8,.9, .7, .6),
freq2=c(.15,.1, .2, .35),
freq3=c(.05,0, .1, .05))
have
#> # A tibble: 4 × 8
#> gene sample genotype1 genotype2 genotype3 freq1 freq2 freq3
#> <chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 gX s1 AA AC …Run Code Online (Sandbox Code Playgroud) 我正在计算R中F检验的p值,它似乎无法显示低于1e-16的任何值.例如,对于F值从80到90,自由度1,200:
> 1-pf(80:90,1,200)
[1] 2.220446e-16 2.220446e-16 1.110223e-16 1.110223e-16 0.000000e+00 0.000000e+00 0.000000e+00
[8] 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
Run Code Online (Sandbox Code Playgroud)
如何提高pf()函数计算的精度?
我在单独的列中有相对整齐的数据样本,基因,等位基因和频率.对于每个基因和每个样本,我需要将等位基因及其相应的频率分成不同的列.这就是我拥有的和我需要的东西.
尝试用dplyr/tidyr来做这件事,但我会采取任何我能得到的解决方案.
是)我有的:
data.frame(sample=rep("sample1", 10),
gene=rep(paste0("gene", 1:5), each=2),
allele=c("A", "G", "A", "C", "A", "T", "C", "G", "G", "T"),
freq=c(.9, .1, .8, .2, .7, .3, .6, .4, .5, .5))
# sample gene allele freq
# 1 sample1 gene1 A 0.9
# 2 sample1 gene1 G 0.1
# 3 sample1 gene2 A 0.8
# 4 sample1 gene2 C 0.2
# 5 sample1 gene3 A 0.7
# 6 sample1 gene3 T 0.3
# 7 sample1 gene4 C 0.6
# 8 sample1 gene4 G …Run Code Online (Sandbox Code Playgroud) 这就是我所拥有的:
data.frame(x=c(0,0,0,1,1,1), y=c(0,0,1,0,1,1))
x y
1 0 0
2 0 0
3 0 1
4 1 0
5 1 1
6 1 1
Run Code Online (Sandbox Code Playgroud)
这就是我想要的:
data.frame(x=c(0,0,0,1,1,1), y=c(0,0,1,0,1,1), pattern=c(1,1,2,3,4,4))
x y pattern
1 0 0 1
2 0 0 1
3 0 1 2
4 1 0 3
5 1 1 4
6 1 1 4
Run Code Online (Sandbox Code Playgroud)
也就是说,我有一堆列(不仅仅是两列)和数千行.我想浏览每一行,弄清楚x,y,z等的不同组合是什么,将每个组称为不同的模式,并为每一行返回该模式.
(背景:我在很多时间点都有几个基因的基因表达数据.我想通过根据在任何特定时间点上升或下调的某些模式来定义模式,试着看看哪些基因随着时间的推移而相似.
谢谢.
我正在使用Mac ssh'ing进入无头RedHat盒子,我需要为下游程序创建一个文件列表来操作.
当我重定向输出时ls,创建的文件有一堆转义字符,而我的下游脚本无法正确读取文件名.当我创建cat文件时,一切看起来都很好:
sdt5z@franklin:~/cufflinks$ ls *.pbs
01_SL8426.pbs 03_SL8428.pbs 09_SL8891.pbs
02_SL8427.pbs 04_SL8429.pbs
sdt5z@franklin:~/cufflinks$ ls *.pbs > myfiles.txt
sdt5z@franklin:~/cufflinks$ cat myfiles.txt
01_SL8426.pbs
02_SL8427.pbs
03_SL8428.pbs
04_SL8429.pbs
09_SL8891.pbs
Run Code Online (Sandbox Code Playgroud)
但是如果我在vim中打开文件,这就是它的样子(所有的小字符^[[和^[终端模拟器中的字符都是蓝色的):
1 ^[[0m^[[0m01_SL8426.pbs^[[0m
2 ^[[0m02_SL8427.pbs^[[0m
3 ^[[0m03_SL8428.pbs^[[0m
4 ^[[0m04_SL8429.pbs^[[0m
5 ^[[0m09_SL8891.pbs^[[0m
6 ^[[m
~
~
~
~
Run Code Online (Sandbox Code Playgroud)
运行file命令显示此文件具有转义序列.
sdt5z@franklin:~/cufflinks$ file myfiles.txt
myfiles.txt: ASCII text, with escape sequences
Run Code Online (Sandbox Code Playgroud)
我的问题是,我怎么能非常简单地将文件重定向到文件,没有任何转义字符?是什么原因造成这种情况?
谢谢.myfiles.txt:带有转义序列的ASCII文本
可能重复:
聚合R总和
我有一个如下所示的数据框:
sample value
1 a 1
2 a 2
3 b 3
4 b 4
5 b 5
6 c 6
Run Code Online (Sandbox Code Playgroud)
我需要在数据帧上折叠sample(可能是一个字符向量或一个因子),添加所有values,所以我得到的结果数据框如下所示:
sample sum
1 a 3
2 b 12
3 c 6
Run Code Online (Sandbox Code Playgroud)
现在是周一早上,我能想到的只是写一个复杂的for循环.我如何使用apply,plyr等来对此进行矢量化?