큰 데이터 세트가 있습니다.이 데이터 세트는 영역 열을 기반으로 여러 데이터 세트로 분할 한 다음 각 영역에 대한 코드 세트를 실행하고 각 영역에 대한 출력 데이터를 얻는 데 필요합니다. for 루프를 사용하여이 작업을 시도했지만 작동하지 않는 것 같습니다. 이것이 어떻게 달성 될 수 있는가. 미안 해요, 난 여전히 R을 학습 가능성에 대해 확실하지 오전 우리가 R.에서 같은 것을 할 수R 열에서 코드 목록 반복하기
for (a in c('10','11','14','20','30','40','50','61','64'))
{
paste0("data3_add_area",a) <- data3_add[AREACODE == a,]
paste0("in_add_area",a) <- in_add[AREA_CODE == a,]
source1 <- paste0("data3_add_area",a)$name
source2 <- paste0("in_add_area",a)$name
.....
paste0("match_",a) <- output
}
- 아래 내가하려고했던 코드입니다. 이것을 달성하는 가장 좋은 방법은 무엇입니까?
편집 - 나는 각 영역 (이 링크에서 심판 - https://www.r-bloggers.com/fuzzy-string-matching-a-survival-skill-to-tackle-unstructured-information/) 복제 할 샘플 데이터
Address1 <- c("786, GALI NO 5, XYZ","rambo, 45, strret 4, atlast, pqr","23/4, 23RD FLOOR, STREET 2, ABC-E, PQR","45-B, GALI NO5, XYZ","HECTIC, 99 STREET, PQR")
AREACODE <- c('10','11','14','20','30')
Year1 <- c(2001:2005)
Address2 <- c("abc, pqr, xyz","786, GALI NO 4 XYZ","45B, GALI NO 5, XYZ","del, 546, strret2, towards east, pqr","23/4, STREET 2, PQR","abc, pqr, xyz","786, GALI NO 4 XYZ","45B, GALI NO 5, XYZ","del, 546, strret2, towards east, pqr","23/4, STREET 2, PQR")
Year2 <- c(2001:2010)
AREA_CODE <- c('10','11','14','20','30','40','50','61','64')
data3_add <- data.table(Address1,Year1,AREACODE)
in_add <- data.table(Address2,Year2,AREA_CODE)
in_add [,unique_id := sprintf("%06d", 1:nrow(in_add))]
CODE 방법 2를 사용
나는 각각의 코드를 복제 할 지역 -
#install.packages('stringdist')
library(stringdist)
distance.methods<-c('osa','lv','dl','hamming','lcs','qgram','cosine','jaccard','jw')
dist.methods<-list()
for(m in 1:length(distance.methods))
{
dist.name.enh<-matrix(NA, ncol = length(source2.devices$name),nrow = length(source1.devices$name))
for(i in 1:length(source2.devices$name)) {
for(j in 1:length(source1.devices$name)) {
dist.name.enh[j,i]<-stringdist(tolower(source2.devices[i,]$name),tolower(source1.devices[j,]$name),method = distance.methods[m])
#adist.enhance(source2.devices[i,]$name,source1.devices[j,]$name)
}
}
dist.methods[[distance.methods[m]]]<-dist.name.enh
}
match.s1.s2.enh<-NULL
for(m in 1:length(dist.methods))
{
dist.matrix<-as.matrix(dist.methods[[distance.methods[m]]])
min.name.enh<-apply(dist.matrix, 1, base::min)
for(i in 1:nrow(dist.matrix))
{
s2.i<-match(min.name.enh[i],dist.matrix[i,])
s1.i<-i
match.s1.s2.enh<-rbind(data.frame(s2.i=s2.i,s1.i=s1.i,s2name=source2.devices[s2.i,]$name, s1name=source1.devices[s1.i,]$name, adist=min.name.enh[i],method=distance.methods[m]),match.s1.s2.enh)
}
}
# Let's have a look at the results
library(reshape2)
matched.names.matrix<-dcast(match.s1.s2.enh,s2.i+s1.i+s2name+s1name~method, value.var = "adist")
View(matched.names.matrix)
일부 재현 가능한 데이터를 제공 할 수 있습니까? 'dput (head (data2_add, 20))'과'in_add'를 사용합니다. – drmariod
어쩌면 당신은'split'을 찾고 있는데, 이것은 어떤 벡터의 값에 기초하여 data.frame을 data.frames의리스트로 나눌 수 있습니다. 'myList <- split (data3_add, data3_add $ AREACODE)'입니다. gregor의 [this post] (http://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames)에 대한 답변은 data.frames 목록 작업에 도움이 될 수 있습니다. . – lmo
@Frank, 지적 해 주셔서 감사합니다. 샘플 코드를 업데이트했습니다. – user1412