R循环将一个数据帧中的值与第二个数据帧中的值进行匹配,并将它们写入第三个数据帧

R循环将一个数据帧中的值与第二个数据帧中的值进行匹配,并将它们写入第三个数据帧,r,R,基本上,我有一个SumpOver的清单,上面列出了很多项目以及这些项目的成本。然后我得到了negpw,它只是sumpwver中的负项目。通过循环,我试图确定sumpwver中有多少正值与negpw中的负值相匹配。当我运行循环时,没有错误,但它只在匹配中创建一行,我知道还有更多的实例。例如,您可以从两个集合的头部看到,sumpwver的前两行应该作为匹配项列出 另外,真正奇怪的是,当我试图在sumpwver集合中找到与拉入匹配项的美元值对应的行时,它不会识别它。但是,如果我按项目编号搜索Sumpo

基本上,我有一个SumpOver的清单,上面列出了很多项目以及这些项目的成本。然后我得到了
negpw
,它只是
sumpwver
中的负项目。通过循环,我试图确定
sumpwver
中有多少正值与
negpw
中的负值相匹配。当我运行循环时,没有错误,但它只在匹配中创建一行,我知道还有更多的实例。例如,您可以从两个集合的头部看到,
sumpwver
的前两行应该作为匹配项列出

另外,真正奇怪的是,当我试图在
sumpwver
集合中找到与拉入匹配项的美元值对应的行时,它不会识别它。但是,如果我按项目编号搜索Sumpover,它会的

如果您能提供任何帮助,我们将不胜感激

(dput(droplevels(head(pw))))
structure(list(Disaster.Number = c(1310L, 1310L, 1310L, 1310L, 
1310L, 1310L), PW.Number = c(1L, 2L, 3L, 4L, 4L, 5L), Version.Number = c(0L, 
0L, 0L, 0L, 1L, 0L), Total.Obligated = c(316180, -316180, 2659.69, 
345794.29, -28929.91, 40344.08)), .Names = c("Disaster.Number", 
"PW.Number", "Version.Number", "Total.Obligated"), .internal.selfref =  <pointer: (nil)>, row.names = c(NA, 
6L), class = c("data.table", "data.frame")) 

  Disaster.Number PW.Number Version.Number Total.Obligated
1            1310         1              0       316180.00
2            1310         2              0      -316180.00
3            1310         3              0         2659.69
4            1310         4              0       345794.29
5            1310         4              1       -28929.91
6            1310         5              0        40344.08



sumpwver <- setDT(pw)[,.(Total.Obligated=sum(Total.Obligated)),
    by = .(dr.pw=paste(Disaster.Number, PW.Number, sep="pw"))]`

(dput(droplevels(head(sumpwver))))
structure(list(dr.pw = c("1310pw1", "1310pw2", "1310pw3", "1310pw4", 
"1310pw5", "1310pw6"), Total.Obligated = c(316180, -316180, 2659.69, 
316864.38, 40401.82, 162751.59)), .Names = c("dr.pw", "Total.Obligated"
), .internal.selfref = <pointer: (nil)>, row.names = c(NA, 6L
), class = c("data.table", "data.frame"))

    dr.pw Total.Obligated
1 1310pw1       316180.00
2 1310pw2      -316180.00
3 1310pw3         2659.69
4 1310pw4       316864.38
5 1310pw5        40401.82
6 1310pw6       162751.59

negpw <- sumpwver[sumpwver$Total.Obligated < 0,]

(dput(droplevels(head(negpw))))
structure(list(dr.pw = c("1310pw2", "1310pw10", "1310pw37", "1310pw268", 
"1310pw270", "1311pw10"), Total.Obligated = c(-316180, -1742.78, 
-0.01, -8679.84, -76.34, -3835294.19)), .Names = c("dr.pw", "Total.Obligated"
), .internal.selfref = <pointer: (nil)>, row.names = c(NA, 6L
), class = c("data.table", "data.frame"))

      dr.pw Total.Obligated
1   1310pw2      -316180.00
2  1310pw10        -1742.78
3  1310pw37           -0.01
4 1310pw268        -8679.84
5 1310pw270          -76.34
6  1311pw10     -3835294.19


matches <- data.frame(dr.pw=character(), Total.Obligated=numeric(), stringsAsFactors=FALSE)`

for (i in nrow(negpw)) {
if (any(sumpwver$Total.Obligated == abs(negpw$Total.Obligated[i]))) {
    matches[nrow(matches)+1,"Total.Obligated"] <- negpw$Total.Obligated[i] 
    matches[nrow(matches),"dr.pw"] <- negpw$dr.pw[i]
} 
} 

(dput(droplevels(head(matches))))
structure(list(dr.pw = "4211pw133", Total.Obligated = -7.27595761418343e-12), .Names = c("dr.pw", 
"Total.Obligated"), row.names = 1L, class = "data.frame")


      dr.pw Total.Obligated
1 4211pw133   -7.275958e-12

sumpwver[sumpwver$Total.Obligated==-7.275958e-12,]
[1] dr.pw           Total.Obligated
<0 rows> (or 0-length row.names)

sumpwver[sumpwver$Total.Obligated=="-7.275958e-12",]
[1] dr.pw           Total.Obligated
<0 rows> (or 0-length row.names)

sumpwver[sumpwver$Total.Obligated==-7.275958*10^-12,]
Empty data.table (0 rows) of 2 cols: dr.pw,Total.Obligated

sumpwver[sumpwver$dr.pw=="4211pw133",]
           dr.pw Total.Obligated
626721 4211pw133   -7.275958e-12
(dput(液滴液位(压头)))
结构(列表)编号=c(1310L、1310L、1310L、1310L、,
1310L,1310L),出厂编号=c(1L,2L,3L,4L,4L,5L),版本编号=c(0L,
0升,0升,0升,1升,0升),总计。义务=c(316180,-316180,2659.69,
345794.29,-28929.9140344.08)),.Names=c(“灾难号”,
“PW.Number”、“Version.Number”、“Total.responsible”),.internal.selfref=,row.names=c(NA,
6L),class=c(“数据表”、“数据帧”))
灾难.编号PW.编号版本.编号总数.已承付
1            1310         1              0       316180.00
2            1310         2              0      -316180.00
3            1310         3              0         2659.69
4            1310         4              0       345794.29
5            1310         4              1       -28929.91
6            1310         5              0        40344.08

SumpOver与
dput()
请共享一些数据(
dput(液滴液位(头部(数据)))
通常是好的)。看起来可能与此相关。您可能希望使用
all.equal()
而不是
=
,或者更好的方法是乘以100并转换为整数。我使用了下面代码提供的链接中建议的all.equal,现在匹配的值为0而不是1.for(I in nrow(negpw)){if(any)(isTRUE)(all.equal)(sumpver$Total.responsible,abs(negpw$Total.responsived[i]()()(()){matches[nrow(matches)+1,“Total.responsived”]格雷戈还有什么想法吗?