【发布时间】:2018-11-12 14:35:51
【问题描述】:
我有两个列数不等的数据框。我想从 df1 中减去 df2 行的强度值,按列(即按样本)。 我的条件是:
- 在 df1 中,每个基因 (gene_nm) 的肽序列 (pep_seq) 及其对应的每个样本的强度 (int_sam) 都有多行。同一个基因出现多次,即占据多行。
- 在 df2 中,基因(行)仅出现一次并具有相应的强度值
- 因此,df1 比 df2 长得多(例如,55000 行与 6000 行)
- 强度列 (int_samp) 的数量可以很多。在这个例子中我有 3 个
数据框 1
pep_seq = c("aaaaaaaaa", "ababababba", "dfsfsfsfds", "xbbcbcncncc", "fbbdsgffhhh", "dggdgdgegeggerr",
"dfgthrgfgf", "wegregegg", "egegegergewge", "sfngegebser", "qegqeefbew", "qegqetegqt",
"qwtqtewr", "etghsfrgf", "sfsdfbdfbergeagaegr", "wasfqertsdfaefwe")
int_samp_1 = c("2421432", "24242424", "NA", "4684757849", "NA", "10485040", "NA",
"6849400", "40300", "NA", "NA", "NA", "556456466", "4646456466", "246464266", "4564242646")
int_samp_2 = c("NA", "5342353", "14532556", "43566", "46367367", "768769769", "797899", "NA", "NA", "NA",
"686899", "7898979", "678568", "NA", "68886", "488")
int_samp_3 = c("11351", "NA", "NA", "NA", "1354151345", "1351351354", "314534", "1535", "3145354", "4353455",
"324535", "3543445", "34535", "34535534", "NA", "NA")
gene_nm = c("A", "A", "A", "A", "A", "A", "B", "B", "B", "C", "C", "C", "C", "C", "C", "C")
df_1 = cbind.data.frame(pep_seq, int_samp_1, int_samp_2, int_samp_3, gene_nm)
数据框 2
int_samp_1a = c("2421432", "24242424", "NA")
int_samp_2a = c("NA", "5342353", "14532556")
int_samp_3a = c("11351", "NA", "NA")
gene_nm.a = c("A", "B", "C")
df_2 = cbind.data.frame(gene_nm.a, int_samp_1a, int_samp_2a, int_samp_3a)
请提出建议。
【问题讨论】:
-
您已经很好地描述了您的数据。现在在这种情况下您的预期输出是什么?
-
你想如何对待
NA?例如,如果df_2中有NA而df_1中没有,那么df_1中的值是否应该保持不变,就好像我们在减零一样?如果df_2中有一个值,但df_1中有NA怎么办?最终应该是一个负数,还是保持NA? -
数据中真正奇怪的一点是,所有测量值都在
factor中定义。我认为最终需要对这些进行减法时不需要它。 -
@MKR............对不起,我没有提到我需要的输出。这可以是带有减去值的单独列,也可以是单独的数据框。两者都会很好。
-
@andrew_reece.. 我可以根据情况从数据帧中删除 NA。在这种情况下想将它们视为“0”。所以是的,你是对的。谢谢。