代码:
data=read.csv("./spmf1234.csv",header=F);
df<- data.frame(do.call('rbind', strsplit(as.character(data$V1),'#',fixed=F)));
df2<- data.frame(do.call('rbind', strsplit(as.character(df$X1),'==>',fixed=F)));
df3=cbind(df2,df);
colnames(df3)=c("lhs","rhs","rule","support","confidence","lift");
df4 <- subset(df3, select = c(lhs,rhs,support,confidence,lift));
final=subset(df4,lhs!=1);
我在csv文件上尝试上面的代码,我已经从spmf中获得了使用from来获得关联规则。我希望所有的规则'1‘在lhs被删除,但这是无效的。
csv文件:
2 ==> 1 #SUP: 1 #CONF: 0.33333 #升降: 0.66667
1 ==> 2 #SUP: 1 #CONF: 0.33333 #升降: 0.66667
3 ==> 1 #SUP: 2 #CONF: 0.5 #升降:1
1 ==> 3 #SUP: 2 #CONF: 0.66667 #升降:1
3 ==> 2 #SUP: 2 #CONF: 0.5 #升降:1
2 ==> 3 #SUP: 2 #CONF: 0.66667 #升降机:1
2 3 ==> 1 #SUP: 1 #CONF: 0.5 #升降:1
1 3 ==> 2 #SUP: 1 #CONF: 0.5 #升降:1
1 2 ==> 3 #SUP: 1 #CONF: 1 #LIFT: 1.5
3 ==> 1 2 #SUP: 1 #CONF: 0.25 #升力: 1.5
2 ==> 1 3 #SUP: 1 #CONF: 0.33333 #LIFT: 1
1 ==> 2 3 #SUP: 1 #CONF: 0.33333 #LIFT: 1
发布于 2014-08-01 00:44:13
final=subset(df4,lhs!=1)
将字符与不起作用的数字进行比较:
# > as.character(df4$lhs)
# [1] "2 " "1 " "3 " "1 " "3 " "2 " "2 3 " "1 3 " "1 2 " "3 " "2 " "1 "
您可能需要使用一个正则表达式,如insead:
final = subset(df4, !grepl("1\\b", lhs))
# > final
# lhs rhs support confidence lift
# 1 2 1 SUP: 1 CONF: 0.33333 LIFT: 0.66667
# 3 3 1 SUP: 2 CONF: 0.5 LIFT: 1
# 5 3 2 SUP: 2 CONF: 0.5 LIFT: 1
# 6 2 3 SUP: 2 CONF: 0.66667 LIFT: 1
# 7 2 3 1 SUP: 1 CONF: 0.5 LIFT: 1
# 10 3 1 2 SUP: 1 CONF: 0.25 LIFT: 1.5
# 11 2 1 3 SUP: 1 CONF: 0.33333 LIFT: 1
Add:
## data preperation
data <- readLines(con = textConnection("
2 ==> 1 #SUP: 1 #CONF: 0.33333 #LIFT: 0.66667
1 ==> 2 #SUP: 1 #CONF: 0.33333 #LIFT: 0.66667
3 ==> 1 #SUP: 2 #CONF: 0.5 #LIFT: 1
1 ==> 3 #SUP: 2 #CONF: 0.66667 #LIFT: 1
3 ==> 2 #SUP: 2 #CONF: 0.5 #LIFT: 1
2 ==> 3 #SUP: 2 #CONF: 0.66667 #LIFT: 1
2 3 ==> 1 #SUP: 1 #CONF: 0.5 #LIFT: 1
1 3 ==> 2 #SUP: 1 #CONF: 0.5 #LIFT: 1
1 2 ==> 3 #SUP: 1 #CONF: 1 #LIFT: 1.5
3 ==> 1 2 #SUP: 1 #CONF: 0.25 #LIFT: 1.5
2 ==> 1 3 #SUP: 1 #CONF: 0.33333 #LIFT: 1
1 ==> 2 3 #SUP: 1 #CONF: 0.33333 #LIFT: 1"))
r <- regexec(pattern = "([0-9 ]+)\\s==>\\s([0-9 ]+)\\s\\#SUP:\\s([0-9.]+)\\s\\#CONF:\\s([0-9.]+)\\s\\#LIFT:\\s([0-9.]+)",
text = data)
m <- regmatches(data, r)
df <- setNames(as.data.frame(do.call(rbind, lapply(m, "[", -1)), stringsAsFactors = FALSE),
c("lhs", "rhs", "support", "confidence", "lift"))
## rows to include/exclude
include <- sapply(strsplit(df$lhs, " "), function(x) !any(as.integer(x) %in% 1:1000))
df[include, ]
https://stackoverflow.com/questions/25076087
复制