【发布时间】:2020-07-13 10:30:45
【问题描述】:
我有一个大约一千行的数据集,但它会增长。 我想找到一定数量的属性几乎相同的行组。
我可以做一个愚蠢的蛮力搜索,但它真的很慢,我相信 R 可以做得更好。
测试数据:
df = read.table(text="
Date Time F1 F2 F3 F4 F5 Conc
2010-06-23 04:00:00 0.1 17.6 14.2 19.5 18.6 16.1
2010-12-16 00:20:00 0.0 28.7 13.7 15.6 16.2 14.4
2010-12-16 10:30:00 0.0 17.0 14.0 19.0 18.0 16.0
2010-12-16 22:15:00 0.0 25.5 12.6 14.9 16.6 16.8
", header=T)
#Initialize column to hold clustering info
df$cluster = NA
#Maximum tolerance for a match between rows
toler=1.0
#Brute force search, very ugly.
for(i in 1:(nrow(df)-1)){
if(is.na(df$cluster[i])){
df$cluster[i] <- i
for(j in (i+1):nrow(df)){
if(max(abs(df[i,3:7] - df[j,3:7]))<toler){
df$cluster[j]<-i
}
}
}
}
if(is.na(df$cluster[j])){df$cluster[j] <- j}
df
预期输出:
Date Time F1 F2 F3 F4 F5 Conc cluster
1 2010-06-23 04:00:00 0.1 17.6 14.2 19.5 18.6 16.1 1
2 2010-12-16 00:20:00 0.0 28.7 13.7 15.6 16.2 14.4 2
3 2010-12-16 10:30:00 0.0 17.0 14.0 19.0 18.0 16.0 1
4 2010-12-16 22:15:00 0.0 25.5 12.6 14.9 16.6 16.8 4
【问题讨论】:
标签: r pattern-matching