R:将一个数据帧中的某些单元格划分为另一个数据帧中的某些单元格

时间:2016-12-21 19:24:47

标签: r dataframe

我想将一个数据帧中的某些单元格划分为另一个数据帧中的某些单元格。

Dataframe1 - 数据集中的列名称为:Compound_Number,Compound_Concentration,Time,Technical_Replicate和Colony_Count。总共有12种化合物,3种浓度,3个时间点和6个技术重复。

Dataframe2 - 列名称为Compound_Number,Technical_Replicate,Time和Replicate_Mean。总共有12种化合物,3个时间点和1个重复平均值。

我需要将Dataframe1中的Colony_Count除以Dataframe2中的Replicate_Mean - 但我需要确保除法以成对方式进行(例如,化合物编号必须相同,以及时间和技术复制)。

我知道我可以手工完成所有这些......

#Dataframe1 (corpus)
C1_T1_TR1 <- corpus[ which(corpus$Compound_Number==1 & corpus$Technical_Replicate==1 & corpus$Time==1),]

#Dataframe2 (normalizing_means)
NC1_T1_TR1 <- normalizing_means[ which(normalizing_means$Compound_Number==1 & normalizing_means$Time==1 & normalizing_means$Technical_Replicate==1),]$Replicate_Mean

然后我可以做......

C1_T1_TR1$Colony_Count/N1_T1

然而,这意味着多次写出这些行以捕获所有化合物,重复和时间 - 然后将所有这些选择和操作的结果合并回一个数据帧。这很麻烦,我确信有更好的R方式。我确实看到了这个:https://stackoverflow.com/questions/33150534/divide-multiple-columns-of-one-data-frame-by-row-names-value-of-another-datafram,但它并不是我所需要的 - 非常感谢任何帮助。

这是一些数据。

Dataframe1

Compound_Number Compound_Concentration  Time    Technical_Replicate Colony_Count
1   0.1 mM  5   4   46000000 #This is the example line
1   0.05 mM 5   4   109000000
1   0.02 mM 5   4   220000000
1   0.1 mM  25  4   30000
1   0.05 mM 25  4   16000000
1   0.02 mM 25  4   340000000
1   0.1 mM  1   1   5000000
1   0.05 mM 1   1   220000000
1   0.02 mM 1   1   210000000
1   0.1 mM  5   1   9000000
1   0.05 mM 5   1   70000000
1   0.02 mM 5   1   57000000
1   0.1 mM  5   2   560000
1   0.05 mM 5   2   34000000
1   0.02 mM 5   2   300000000
1   0.1 mM  25  2   10000
2   0.05 mM 1   3   120000000
2   0.02 mM 1   3   210000000
2   0.1 mM  5   3   280000000
2   0.05 mM 5   3   240000000
2   0.02 mM 5   3   80000000
2   0.1 mM  25  3   110000000
2   0.05 mM 25  3   250000000
2   0.02 mM 25  3   350000000
2   0.1 mM  1   4   290000000
2   0.05 mM 1   4   340000000
2   0.05 mM 1   1   300000000
2   0.02 mM 1   1   110000000
2   0.1 mM  5   1   510000000
2   0.05 mM 5   1   420000000

Dataframe2

Compound_Number Technical_Replicate Time    Replicate_Mean
1   1   1   288000000
1   1   5   232000000
1   1   25  230000000
1   2   1   351666666.666667
1   2   5   320000000
1   2   25  291666666.666667
1   3   1   570000000
1   3   5   493333333.333333
1   3   25  701666666.666667
1   4   1   425000000
1   4   5   630000000 #This is the example line
1   4   25  380000000
1   5   1   473333333.333333
1   5   5   463333333.333333
1   5   25  433333333.333333
1   6   1   478333333.333333
1   6   5   453333333.333333
1   6   25  520000000
2   1   1   391666666.666667
2   1   5   356666666.666667
2   1   25  373333333.333333
2   2   1   445000000
2   2   5   423333333.333333
2   2   25  353333333.333333
2   3   1   248333333.333333
2   3   5   281666666.666667
2   3   25  151666666.666667
2   4   1   325000000
2   4   5   360000000
2   4   25  420000000
2   5   1   156666666.666667
2   5   5   298333333.333333
2   5   25  338333333.333333
2   6   1   313333333.333333
2   6   5   318333333.333333
2   6   25  276666666.666667

为清楚起见,这是Dataframe1的一个示例行:

Compound_Number  Compound_Concentration Time    Technical_Replicate Colony_Count
1   0.1 mM  5   4   46000000

我需要在Dataframe2中找到相应的行。

Compound_Number Technical_Replicate Time    Replicate_Mean
1   4   5   630000000

我想将46000000除以630000000。

提前谢谢。

1 个答案:

答案 0 :(得分:-1)

我不能相信这一点(虽然我希望我最终能够到达那里)。

NEW_DF <- merge(corpus, normalizing_means)

然后我可以轻松地将一列与另一列分开。

感谢@sirallen。