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