如何解决R使用for循环
我有以下数据帧列表。
list(structure(list(SrlNo = c(248L,273L,282L,284L),VendorCode = c("V001889","V000590","V001578","V001836"),SiteDetails = c("value add sites as per annexure","milan et mega bus shelter","backdrop","black drop with black masking"
),City = c("","","")),.Names = c("SrlNo","VendorCode","SiteDetails","City"),row.names = c("248","273","282","284"
),class = "data.frame"),structure(list(SrlNo = 59135:59136,VendorCode = c("V000072","V000072"),SiteDetails = c("transportation charges-gst- rece cost for 24 paragana(south)","transportation charges-gst- rece cost for 24 paragana (south)"
),City = c("24 Paragana(South)","24 Paragana(South)")),row.names = c("59127","59128"),structure(list(SrlNo = c(34595L,34609L,34661L,34678L),VendorCode = c("V002446","V000931","V000094","V002240"),SiteDetails = c("taki road","barasat flyover","madhyamgram flyover fcg chowrasta","madhyamgram bt college"
),City = c("24 Pargana North","24 Pargana North","24 Pargana North")),row.names = c("34587","34601","34653","34670"),class = "data.frame"))
使用agrep,我试图将相似的探测站点详细信息分组在一起。我正在使用以下代码:
for (e in ern) {
x <- e$SiteDetails
x <- x[x!=""]
groups <- list()
i <- 1
while(length(x) > 0)
{
id <- agrep(x[1],x,ignore.case = TRUE,max.distance = 0.001)
groups[[i]] <- x[id]
x <- x[-id]
i <- i + 1
}
Indx <- 1:length(groups)
aa <- with(e,rep(Indx,vapply(groups,length,1L)))
bb <- unlist(groups)
cc <- data.frame(aa,bb)
#cbind(e,group=cc$aa[match(e$SiteDetails,cc$bb)])
e$group <- cc$aa[match(e$SiteDetails,cc$bb)]
#print(cc$aa[match(e$SiteDetails,cc$bb)])
#print(e$VendorCode)
}
使用上面的代码,我遍历列表中的每个数据框,对站点详细信息列进行分组,并且能够打印分组值。但是,当我要将组附加到数据帧时,没有响应/也没有错误。我无法在for循环中创建一个名为group的新列。
e$group <- cc$aa[match(e$SiteDetails,cc$bb)]
我已经尝试了上述行的各种组合,例如ern[[e]]
和cbind
,但是它们不起作用。
解决方法
您的e
循环中的for
与原始ern
列表没有任何联系,因此,无法在列表中添加任何新信息。您应该改为遍历列表的索引。
for (e in seq_along(ern)) {
x <- ern[[e]]$SiteDetails
x <- x[x!=""]
groups <- list()
i <- 1
while(length(x) > 0)
{
id <- agrep(x[1],x,ignore.case = TRUE,max.distance = 0.001)
groups[[i]] <- x[id]
x <- x[-id]
i <- i + 1
}
Indx <- 1:length(groups)
aa <- with(ern[[e]],rep(Indx,vapply(groups,length,1L)))
bb <- unlist(groups)
cc <- data.frame(aa,bb)
ern[[e]]$group <- cc$aa[match(ern[[e]]$SiteDetails,cc$bb)]
}
然后,它在group
的每个数据帧中返回一个称为ern
的新列。
ern
#[[1]]
# SrlNo VendorCode SiteDetails City group
#248 248 V001889 value add sites as per annexure 1
#273 273 V000590 milan et mega bus shelter 2
#282 282 V001578 backdrop 3
#284 284 V001836 black drop with black masking 4
#[[2]]
# SrlNo VendorCode SiteDetails City group
#59127 59135 V000072 transportation charges-gst- rece cost for 24 paragana(south) 24 Paragana(South) 1
#59128 59136 V000072 transportation charges-gst- rece cost for 24 paragana (south) 24 Paragana(South) 2
#[[3]]
# SrlNo VendorCode SiteDetails City group
#34587 34595 V002446 taki road 24 Pargana North 1
#34601 34609 V000931 barasat flyover 24 Pargana North 2
#34653 34661 V000094 madhyamgram flyover fcg chowrasta 24 Pargana North 3
#34670 34678 V002240 madhyamgram bt college 24 Pargana North 4
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。