我无法想象我是第一个有这个问题的人,但我还没有找到解决方案(这里或其他地方).
我有几列,我想在R中平均.唯一最简单的方面是一些列包含NA.
例如:
Trait Col1 Col2 Col3
DF 23 NA 23
DG 2 2 2
DH NA 9 9
Run Code Online (Sandbox Code Playgroud)
我想创建一个Col4,它平均前3列中的条目,忽略了NA.所以:
Trait Col1 Col2 Col3 Col4
DF 23 NA 23 23
DG 2 2 2 2
DH NA 9 9 9
Run Code Online (Sandbox Code Playgroud)
理想情况下这样的事情会起作用:
data$Col4 <- mean(data$Chr1, data$Chr2, data$Chr3, na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.
我在这里发布了一个问题:R中的匹配范围合并关于根据落入第二个文件中的范围的一个文件中的数字合并两个文件.到目前为止,我没有成功拼凑代码来实现这一目标.我遇到的问题是我正在使用的代码逐行比较文件.这是一个问题,因为1.)一个文件比另一个文件长得多,并且2.)我需要较短文件中的行扫描较长文件中的每个范围对 - 而不仅仅是同一行中的范围.
我一直在使用原始问题中发布的函数,我觉得应该有一种方法将它应用到一个更通用的循环,将第一个文件中的每一行与第二个文件中的每一行进行比较,但我没有'我想通了.如果有人有任何建议,我将不胜感激.
****已编辑.
数据的性质是这样的:每个范围不一定是唯一的,尽管大多数是.它们的大小也不相同,有些完全属于其他类型.findInterval因此产生错误,因为范围不能排序以便以"非降序"顺序排列.
以下是每个数据框的前6行:
file1test <- data.frame(SNP=c("rs2343", "rs211", "rs754", "rs854", "rs343", "rs626"), BP=c(860269, 369640, 861822, 367934, 706940, 717244))
file2 <- data.frame(Gene=c("E613", "E92", "E49", "E3543", "E11", "E233"), BP_start=c(367640, 621059, 721320, 860260, 861322, 879584), BP_end = c(368634, 622053, 722513, 879955, 879533, 894689))
Run Code Online (Sandbox Code Playgroud)
因此,正如您所看到的,第5行的范围位于第4行的范围内,第一行的两个SNP落在第4行的范围内,但只有一个属于第二行的范围.
第一个包含SNP的文件只有大约400行.但是,包含范围的第二个文件大约有20K.我想要作为输出产生的是一个数据框,其中包含来自第一个文件(SNP)的行,其中BP属于第二个文件中的BP范围.如果SNP落入两个范围,那么它将出现两次,等等.
我有一个数据集,缩写在这里:
SNP chr BP log10 PPA
rs10068 17 56555 1.16303 0.030
rs10032 17 56561 26.364 0.975
rs10354 17 34951 4.3212 0.626
rs10043 17 20491 0.00097 0.006
rs10457 17 69572 -0.38403 0.014
rs10465 17 69872 8.19547 0.927
Run Code Online (Sandbox Code Playgroud)
其中PPA是后关联概率.由于我有一些较高的log10值(> 6),我想确定这些区域周围的可靠间隔,以确定它们的确有多大或多小.
为此,我首先想要识别log10> 6的SNP,使用子集这很简单.
newdata <- subset(data, log10 > 6)
Run Code Online (Sandbox Code Playgroud)
然而,我还想在这个子集中包括物理上靠近这些先导SNP的SNP,使用BP 500 +/-前导SNP的BP(log10> 6).在这里,我不确定最好的方法.这是我可以解决的问题,subset还是我应该首先在原始数据中识别这些主要SNP,然后从那里进行分组?
一旦我隔离了这些区域,我就能继续前进.
任何建议表示赞赏!
有没有一种方法可以根据另一个数据框的列从数据框中删除行?
例如,数据框1:
Gene CHROM POS REF ALT N_INFORMATIVE Test Beta SE
AAA 1 15211 T G 1481 1:15211 -0.0599805 0.112445
LLL 1 762061 T A 1481 1:762061 0.2144100 0.427085
CCC 1 762109 C T 1481 1:762109 0.2847510 0.204255
DDD 1 762273 G A 1481 1:762273 0.0443946 0.119924
Run Code Online (Sandbox Code Playgroud)
数据框2(仅1列):
Genes
AAA
BBB
CCC
DDD
EEE
FFF
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我想扫描数据框1的第1列,以查找与数据框2的所有匹配项,并删除匹配的行。
它们需要完全匹配,结果将如下所示:
Gene CHROM POS REF ALT N_INFORMATIVE Test Beta SE
LLL 1 762061 T A 1481 1:762061 0.2144100 0.427085
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这种方法的变体,但是没有用:
NewDataframe <-!(Dataframe1$Gene==Dataframe2$Genes)
Run Code Online (Sandbox Code Playgroud)
谢谢阅读。
这是一个非常简单的问题.
我有一个冗长的数据集,并希望根据特定列中的某些条目创建一个子集.在这种情况下,我这样设置:
示例数据:
> NL
SNP alleles
rs1234 A_T
rs1235 A_G
rs2343 A_T
rs2342 G_C
rs1134 C_G
rs1675 T_A
rs8543 A_T
rs2842 G_A
P <- subset(NL, alleles = "A_T", alleles = "T_A", alleles = "G_C", alleles = "C_G")
Run Code Online (Sandbox Code Playgroud)
这样运行没有错误,但是得到的P不是任何方式的子集(P的尾部仍然显示与原始NL相同的条目数).
我究竟做错了什么?
我有三个文件,每个文件中的信息不会以任何方式重叠 - 但是,它们需要以特定的方式相互合并才能有用.
第一个文件在后两个文件中是唯一的,它们以相同的方式设置.文件1看起来像这样:
rs101 12 126890980 A G
rs102 4 114553253 A C
rs103 9 172776204 C T
Run Code Online (Sandbox Code Playgroud)
文件2看起来像这样:
1 178 0.12 0.26 0.02
1 1458 0.35 0.37 0.021
1 318 0.99 0.105 0.08
Run Code Online (Sandbox Code Playgroud)
文件3看起来像这样:
1 3567 0.78 0.67 0.005
0 0 0 0 0
1 3567 0.34 -0.15 0.001
Run Code Online (Sandbox Code Playgroud)
我想要一个脚本,将这些文件合并到文件中以生成第三个文件:
rs101 12 126890980 A G
1 178 0.12 0.26 0.02
1 3567 0.78 0.67 0.005
rs102 4 114553253 A C
1 1458 0.35 0.37 0.02
0 0 0 …Run Code Online (Sandbox Code Playgroud) 我想知道如何根据两行的总和从数据集中删除包含超过一定数量字符的行.
例如,在以下数据中:
2 rs121065 0 17696224 T C
2 rs1860485 0 17696230 T C
2 rs237147 0 17696256 C CGAGGCAG
2 rs1909633 0 17696365 A G
2 rs574724 0 17696368 T C
Run Code Online (Sandbox Code Playgroud)
我想删除第三行.问题是一系列字母是可变的,因此在其他地方,数据可能如下所示:
2 rs113308 0 17683654 CCTTT C
Run Code Online (Sandbox Code Playgroud)
或这个:
2 rs103371 0 17667279 TG T
Run Code Online (Sandbox Code Playgroud)
所以 - 基本上,需要删除最后两列中包含2个以上字符的任何行,理想情况下我的数据集将如下所示:
2 rs121065 0 17696224 T C
2 rs1860485 0 17696230 T C
2 rs1909633 0 17696365 A G
2 rs574724 0 17696368 T C
Run Code Online (Sandbox Code Playgroud)
任何建议都非常感谢!
我想结合两个列表:
data1 data2
a 1 a 1
b 2 b 2
c 3 c 3
d 4 f 6
e 5 g 7
Run Code Online (Sandbox Code Playgroud)
所以最终的产品是:
data3
a 1
b 2
c 3
d 4
e 5
f 6
g 7
Run Code Online (Sandbox Code Playgroud)
我尝试过使用merge的变体,但不可避免地会从每个列表中丢失一些东西.
谢谢您的帮助!谢谢!