如何绑定第二个表的行名与第一个表的列中的值匹配的两个表

  • 本文关键字:两个 绑定 何绑定 第二个 第一个 r
  • 更新时间 :
  • 英文 :


我正试图根据值的矩阵和分析物,附加一个表,并对另一个表的值进行限制。

表一的列包括矩阵(Fish或Floc)、分析物

表二表一中每个分析物都有行,3列,一列用于Fish矩阵,两列用于Floc矩阵。

我正试图找出如何将表二绑定到表格一,以便分析物和矩阵的每个特定组合都将表二的相应极限值附加为一个新列,其中不符合读取NA条件的行。

limit_table看起来像这样:

limits= matrix(c(30,33,9.79,
0.5,4.98,0.99,
0.88,111,43.4,
300,149,31.6,
0.1,1.06,0.18,
50,128,35.8), nrow=6, ncol=3, byrow=TRUE)
colnames(limits) = c("fish","floc_PEC","floc_TEC")
rownames(limits) = c("As","Cd","Cr","Cu","Hg","Pb")
limit_table=as.table(limits)
limit_table
fish floc_PEC floc_TEC
As  30.00    33.00     9.79
Cd   0.50     4.98     0.99
Cr   0.88   111.00    43.40
Cu 300.00   149.00    31.60
Hg   0.10     1.06     0.18
Pb  50.00   128.00    35.80

Results表基本上如下所示:

setwd("Y:/Luke/HWTT")
Lab_Results <- read.csv(
file = "Grassy_4.22_Data.csv",
fileEncoding = 'UTF-8-BOM',
header  =TRUE,
sep = ",",
dec = "."
)
Lab_Results= Lab_Results[c("Sample_Date","Matrix","Analyte","ResultDry","ResultWet","MDLDry","MRLDry","MDLWet","MRLWet","Units")]
Results= Lab_Results[which(Lab_Results$Matrix=='Fish' | Lab_Results$Matrix=="Floc"),]
Sample_Date Matrix Analyte ResultDry ResultWet  MDLDry   MRLDry   MDLWet   MRLWet Units
1   04/27/2022   Floc     %TS    5.6800   5.68000 0.13000  0.42000 0.130000 0.420000     %
2   04/27/2022   Floc      As    1.9000   0.10800 0.71300  1.66000 0.040000 0.094000 mg/kg
3   04/27/2022   Floc      Cd    0.3170   0.01800 0.31700  0.71300 0.018000 0.040000 mg/kg
4   04/27/2022   Floc      Cr   10.5000   0.59500 7.13000 14.30000 0.405000 0.809000 mg/kg
5   04/27/2022   Floc      Cu    4.2000   0.24000 4.20000  8.40000 0.240000 0.480000 mg/kg
6   04/27/2022   Floc      Pb    3.5300   0.20000 0.71300  2.14000 0.040000 0.121000 mg/kg
7   04/27/2022   Floc      Hg    0.0269   0.00153 0.00563  0.01410 0.000319 0.000799 mg/kg
8   04/29/2022   Fish     %TS   20.5700  20.57000 0.33000  1.09000 0.330000 1.090000     %
9   04/29/2022   Fish      As    0.1620   0.03300 0.03900  0.09200 0.008000 0.019000 mg/kg
10  04/29/2022   Fish      Cd    0.0170   0.00400 0.01700  0.03900 0.004000 0.008000 mg/kg
11  04/29/2022   Fish      Cr    0.8950   0.18400 0.39200  0.78400 0.081000 0.161000 mg/kg
12  04/29/2022   Fish      Cu    7.9700   1.64000 0.23100  0.46200 0.048000 0.095000 mg/kg
13  04/29/2022   Fish      Hg    0.1900   0.03900 0.00308  0.00771 0.000634 0.001590 mg/kg
14  04/29/2022   Fish      Pb    1.3900   0.28700 0.03900  0.11800 0.008000 0.024000 mg/kg

我希望新的表格看起来像这样,3个新列的值对应于矩阵和分析物,否则NA:

Sample_Date Matrix Analyte ResultDry ResultWet  MDLDry   MRLDry   MDLWet   MRLWet Units Fish_Limit Floc_PEC Floc_TEC
1   04/27/2022   Floc     %TS    5.6800   5.68000 0.13000  0.42000 0.130000 0.420000     %
2   04/27/2022   Floc      As    1.9000   0.10800 0.71300  1.66000 0.040000 0.094000 mg/kg
3   04/27/2022   Floc      Cd    0.3170   0.01800 0.31700  0.71300 0.018000 0.040000 mg/kg
4   04/27/2022   Floc      Cr   10.5000   0.59500 7.13000 14.30000 0.405000 0.809000 mg/kg
5   04/27/2022   Floc      Cu    4.2000   0.24000 4.20000  8.40000 0.240000 0.480000 mg/kg
6   04/27/2022   Floc      Pb    3.5300   0.20000 0.71300  2.14000 0.040000 0.121000 mg/kg
7   04/27/2022   Floc      Hg    0.0269   0.00153 0.00563  0.01410 0.000319 0.000799 mg/kg
8   04/29/2022   Fish     %TS   20.5700  20.57000 0.33000  1.09000 0.330000 1.090000     %
9   04/29/2022   Fish      As    0.1620   0.03300 0.03900  0.09200 0.008000 0.019000 mg/kg
10  04/29/2022   Fish      Cd    0.0170   0.00400 0.01700  0.03900 0.004000 0.008000 mg/kg
11  04/29/2022   Fish      Cr    0.8950   0.18400 0.39200  0.78400 0.081000 0.161000 mg/kg
12  04/29/2022   Fish      Cu    7.9700   1.64000 0.23100  0.46200 0.048000 0.095000 mg/kg
13  04/29/2022   Fish      Hg    0.1900   0.03900 0.00308  0.00771 0.000634 0.001590 mg/kg
14  04/29/2022   Fish      Pb    1.3900   0.28700 0.03900  0.11800 0.008000 0.024000 mg/kg

编辑:

我重新格式化了limit_table,使行名成为一个名为Analyte的新列,并将该表合并到第一个表中,Analyte作为by=运算符:

limits= matrix(c("As",30,33,9.79,
"Cd",0.5,4.98,0.99,
"Cr",0.88,111,43.4,
"Cu",300,149,31.6,
"Hg",0.1,1.06,0.18,
"Pb",50,128,35.8), nrow=6, ncol=4, byrow=TRUE)
colnames(limits) = c("Analyte","Fish_Limit","Floc_PEC","Floc_TEC")
limits
Results= merge(Results,limits,by='Analyte', all.x=TRUE)

但是,我不可能只将Fish_Limit列添加到包含Fish矩阵值的行中,并将Floc_PEC和Floc_TEC列添加到具有FlocMatrix的行中。有没有办法包括额外的步骤?

以下是到目前为止新表格的一部分:

> Results
Analyte Sample_Date Matrix ResultDry ResultWet  MDLDry   MRLDry   MDLWet   MRLWet Units Fish_Limit Floc_PEC Floc_TEC
1      %TS  04/27/2022   Floc    5.6800   5.68000 0.13000  0.42000 0.130000 0.420000     %       <NA>     <NA>     <NA>
2      %TS  04/27/2022   Floc    5.2100   5.21000 0.14000  0.45000 0.140000 0.450000     %       <NA>     <NA>     <NA>
3      %TS  04/27/2022   Floc    5.2700   5.27000 0.13000  0.45000 0.130000 0.450000     %       <NA>     <NA>     <NA>
4      %TS  04/29/2022   Fish   21.8700  21.87000 0.28000  0.94000 0.280000 0.940000     %       <NA>     <NA>     <NA>
5      %TS  04/29/2022   Fish   21.9800  21.98000 0.28000  0.92000 0.280000 0.920000     %       <NA>     <NA>     <NA>
6      %TS  04/29/2022   Fish   21.9200  21.92000 0.30000  1.00000 0.300000 1.000000     %       <NA>     <NA>     <NA>
7      %TS  04/29/2022   Fish   20.2800  20.28000 0.31000  1.02000 0.310000 1.020000     %       <NA>     <NA>     <NA>
8      %TS  04/29/2022   Fish   20.5700  20.57000 0.33000  1.09000 0.330000 1.090000     %       <NA>     <NA>     <NA>
9      %TS  04/29/2022   Fish   20.9800  20.98000 0.33000  1.10000 0.330000 1.100000     %       <NA>     <NA>     <NA>
10     %TS  04/29/2022   Fish   20.8200  20.82000 0.34000  1.12000 0.340000 1.120000     %       <NA>     <NA>     <NA>
11     %TS  04/29/2022   Fish   21.2000  21.20000 0.29000  0.96000 0.290000 0.960000     %       <NA>     <NA>     <NA>
12     %TS  04/29/2022   Fish   21.5300  21.53000 0.28000  0.95000 0.280000 0.950000     %       <NA>     <NA>     <NA>
13      As  04/29/2022   Fish    0.1240   0.02700 0.04100  0.09500 0.009000 0.021000 mg/kg         30       33     9.79
14      As  04/29/2022   Fish    0.1560   0.03400 0.04000  0.09300 0.009000 0.020000 mg/kg         30       33     9.79
15      As  04/27/2022   Floc    1.9000   0.10800 0.71300  1.66000 0.040000 0.094000 mg/kg         30       33     9.79
16      As  04/27/2022   Floc    2.3200   0.12100 0.75800  1.77000 0.040000 0.092000 mg/kg         30       33     9.79
17      As  04/27/2022   Floc    2.3900   0.12600 0.79700  1.86000 0.042000 0.098000 mg/kg         30       33     9.79
18      As  04/29/2022   Fish    0.1640   0.03600 0.03800  0.09000 0.008000 0.020000 mg/kg         30       33     9.79
19      As  04/29/2022   Fish    0.1550   0.03400 0.04000  0.09400 0.009000 0.021000 mg/kg         30       33     9.79
20      As  04/29/2022   Fish    0.1780   0.03700 0.04000  0.09200 0.008000 0.019000 mg/kg         30       33     9.79
21      As  04/29/2022   Fish    0.1600   0.03200 0.03900  0.09200 0.008000 0.019000 mg/kg         30       33     9.79
22      As  04/29/2022   Fish    0.1620   0.03300 0.03900  0.09200 0.008000 0.019000 mg/kg         30       33     9.79
23      As  04/29/2022   Fish    0.1700   0.03600 0.04000  0.09400 0.008000 0.020000 mg/kg         30       33     9.79
24      As  04/29/2022   Fish    0.1330   0.02800 0.04200  0.09700 0.009000 0.021000 mg/kg         30       33     9.79
25      Cd  04/29/2022   Fish    0.0180   0.00400 0.01800  0.04000 0.004000 0.009000 mg/kg        0.5     4.98     0.99
26      Cd  04/29/2022   Fish    0.0180   0.00400 0.01800  0.04100 0.004000 0.009000 mg/kg        0.5     4.98     0.99
27      Cd  04/29/2022   Fish    0.0180   0.00400 0.01800  0.04200 0.004000 0.009000 mg/kg        0.5     4.98     0.99
28      Cd  04/29/2022   Fish    0.0180   0.00400 0.01800  0.04000 0.004000 0.009000 mg/kg        0.5     4.98     0.99
29      Cd  04/27/2022   Floc    0.3170   0.01800 0.31700  0.71300 0.018000 0.040000 mg/kg        0.5     4.98     0.99
30      Cd  04/27/2022   Floc    0.3370   0.01800 0.33700  0.75800 0.018000 0.040000 mg/kg        0.5     4.98     0.99
31      Cd  04/27/2022   Floc    0.3540   0.01900 0.35400  0.79700 0.019000 0.042000 mg/kg        0.5     4.98     0.99
32      Cd  04/29/2022   Fish    0.0170   0.00400 0.01700  0.03800 0.004000 0.008000 mg/kg        0.5     4.98     0.99
33      Cd  04/29/2022   Fish    0.0180   0.00400 0.01800  0.04000 0.004000 0.008000 mg/kg        0.5     4.98     0.99
34      Cd  04/29/2022   Fish    0.0180   0.00400 0.01800  0.04000 0.004000 0.008000 mg/kg        0.5     4.98     0.99
35      Cd  04/29/2022   Fish    0.0170   0.00400 0.01700  0.03900 0.004000 0.008000 mg/kg        0.5     4.98     0.99
36      Cd  04/29/2022   Fish    0.0170   0.00400 0.01700  0.03900 0.004000 0.008000 mg/kg        0.5     4.98     0.99

如果您的limits对象是data.frame(请参阅下面的输入),则可以使用dplyr来执行此操作

library(dplyr)
Results %>% 
left_join(
bind_rows(
limits %>% mutate(Matrix = "Fish") %>% mutate(Floc_PEC = NA, Floc_TEC=NA),
limits %>% mutate(Matrix = "Floc") %>% mutate(Fish_Limit = NA)
)
)

输出:

Sample_Date Matrix Analyte ResultDry ResultWet  MDLDry   MRLDry   MDLWet   MRLWet Units Fish_Limit Floc_PEC Floc_TEC
1   04/27/2022   Floc     %TS    5.6800   5.68000 0.13000  0.42000 0.130000 0.420000     %         NA       NA       NA
2   04/27/2022   Floc      As    1.9000   0.10800 0.71300  1.66000 0.040000 0.094000 mg/kg         NA    33.00     9.79
3   04/27/2022   Floc      Cd    0.3170   0.01800 0.31700  0.71300 0.018000 0.040000 mg/kg         NA     4.98     0.99
4   04/27/2022   Floc      Cr   10.5000   0.59500 7.13000 14.30000 0.405000 0.809000 mg/kg         NA   111.00    43.40
5   04/27/2022   Floc      Cu    4.2000   0.24000 4.20000  8.40000 0.240000 0.480000 mg/kg         NA   149.00    31.60
6   04/27/2022   Floc      Pb    3.5300   0.20000 0.71300  2.14000 0.040000 0.121000 mg/kg         NA   128.00    35.80
7   04/27/2022   Floc      Hg    0.0269   0.00153 0.00563  0.01410 0.000319 0.000799 mg/kg         NA     1.06     0.18
8   04/29/2022   Fish     %TS   20.5700  20.57000 0.33000  1.09000 0.330000 1.090000     %         NA       NA       NA
9   04/29/2022   Fish      As    0.1620   0.03300 0.03900  0.09200 0.008000 0.019000 mg/kg      30.00       NA       NA
10  04/29/2022   Fish      Cd    0.0170   0.00400 0.01700  0.03900 0.004000 0.008000 mg/kg       0.50       NA       NA
11  04/29/2022   Fish      Cr    0.8950   0.18400 0.39200  0.78400 0.081000 0.161000 mg/kg       0.88       NA       NA
12  04/29/2022   Fish      Cu    7.9700   1.64000 0.23100  0.46200 0.048000 0.095000 mg/kg     300.00       NA       NA
13  04/29/2022   Fish      Hg    0.1900   0.03900 0.00308  0.00771 0.000634 0.001590 mg/kg       0.10       NA       NA
14  04/29/2022   Fish      Pb    1.3900   0.28700 0.03900  0.11800 0.008000 0.024000 mg/kg      50.00       NA       NA

输入:

limits = structure(list(Analyte = c("As", "Cd", "Cr", "Cu", "Hg", "Pb"
), Fish_Limit = c(30, 0.5, 0.88, 300, 0.1, 50), Floc_PEC = c(33, 
4.98, 111, 149, 1.06, 128), Floc_TEC = c(9.79, 0.99, 43.4, 31.6, 
0.18, 35.8)), class = "data.frame", row.names = c(NA, -6L))
Results = structure(list(Sample_Date = c("04/27/2022", "04/27/2022", "04/27/2022", 
"04/27/2022", "04/27/2022", "04/27/2022", "04/27/2022", "04/29/2022", 
"04/29/2022", "04/29/2022", "04/29/2022", "04/29/2022", "04/29/2022", 
"04/29/2022"), Matrix = c("Floc", "Floc", "Floc", "Floc", "Floc", 
"Floc", "Floc", "Fish", "Fish", "Fish", "Fish", "Fish", "Fish", 
"Fish"), Analyte = c("%TS", "As", "Cd", "Cr", "Cu", "Pb", "Hg", 
"%TS", "As", "Cd", "Cr", "Cu", "Hg", "Pb"), ResultDry = c(5.68, 
1.9, 0.317, 10.5, 4.2, 3.53, 0.0269, 20.57, 0.162, 0.017, 0.895, 
7.97, 0.19, 1.39), ResultWet = c(5.68, 0.108, 0.018, 0.595, 0.24, 
0.2, 0.00153, 20.57, 0.033, 0.004, 0.184, 1.64, 0.039, 0.287), 
MDLDry = c(0.13, 0.713, 0.317, 7.13, 4.2, 0.713, 0.00563, 
0.33, 0.039, 0.017, 0.392, 0.231, 0.00308, 0.039), MRLDry = c(0.42, 
1.66, 0.713, 14.3, 8.4, 2.14, 0.0141, 1.09, 0.092, 0.039, 
0.784, 0.462, 0.00771, 0.118), MDLWet = c(0.13, 0.04, 0.018, 
0.405, 0.24, 0.04, 0.000319, 0.33, 0.008, 0.004, 0.081, 0.048, 
0.000634, 0.008), MRLWet = c(0.42, 0.094, 0.04, 0.809, 0.48, 
0.121, 0.000799, 1.09, 0.019, 0.008, 0.161, 0.095, 0.00159, 
0.024), Units = c("%", "mg/kg", "mg/kg", "mg/kg", "mg/kg", 
"mg/kg", "mg/kg", "%", "mg/kg", "mg/kg", "mg/kg", "mg/kg", 
"mg/kg", "mg/kg")), row.names = c(NA, -14L), class = "data.frame")

最新更新