r - 将字符串转换为唯一的整数形式
问题描述
我有一个字符串向量,在我的情况下,字符串是逻辑规则。有很多这样的规则,但为了清楚起见,我只展示了三个。
rules <- c("X[,1]>0.5 & X[,2]<1" , "X[,3]>0.2" , "X[,3]>0.3")
我想将规则转换为整数形式,就像这样
rules <- c("X[,1]>0.5 & X[,2]<1" , "X[,3]>0.2" , "X[,3]>0.3")
int <- rbind(c(0,0,2,5,0,1,0,0,1,0),c(1,2,0,0,0,0,0,0,0,0),c(1,1,0,0,0,0,0,0,0,0))
.
cbind.data.frame(rules,int)
rules 1 2 3 4 5 6 7 8 9 10
1 X[,1]>0.5 & X[,2]<1 0 0 2 5 0 1 0 0 1 0
2 X[,3]>0.2 1 2 0 0 0 0 0 0 0 0
3 X[,3]>0.3 1 1 0 0 0 0 0 0 0 0
有三个条件
所有
int
向量的长度必须相同如果规则(字符串)与另一个字符串相似,那么
int
向量也应该相似。为了能够计算字符串或int
向量之间的距离,这是必要的。将字符串转换为 int 形式以及将 int 形式转换为字符串的能力
这样的转换可能吗?
解决方案
如果所有规则都与您显示的规则相似,一种方法是生成一个标准X
矩阵,解析每个规则并将它们应用于 X。这将生成 TRUE 和 FALSE 向量(很容易转换为 1和 0) 与长度nrow(X)
。
例如,
set.seed(123)
X <- matrix(runif(3000, 0, 2), nrow = 1000)
rules <- c("X[,1]>0.5 & X[,2]<1" , "X[,3]>0.2" , "X[,3]>0.3")
int <- matrix(NA, nrow = length(rules), ncol = nrow(X))
for (i in seq_along(rules))
int[i,] <- as.numeric(eval(parse(text = rules[i])))
rownames(int) <- rules
dist <- matrix(NA, length(rules), length(rules),
dimnames = list(rules, rules))
for (i in seq_along(rules))
for (j in seq_along(rules))
dist[i, j] <- sqrt(sum((int[i,] - int[j,])^2))
dist
#> X[,1]>0.5 & X[,2]<1 X[,3]>0.2 X[,3]>0.3
#> X[,1]>0.5 & X[,2]<1 0.00000 24.67793 24.28992
#> X[,3]>0.2 24.67793 0.00000 7.28011
#> X[,3]>0.3 24.28992 7.28011 0.00000
由reprex 包于 2021-08-29 创建 (v2.0.0 )
推荐阅读
- c# - ConfigurationBuilder 在天蓝色功能中不起作用
- sqlite - 具有多个数据库的 Android Room
- angular - 服务的松耦合与紧耦合
- ssl - 如何解决远程服务器重新索引时的 SSL 握手问题
- amazon-web-services - 显示不同区域的 S3 存储桶
- android - Google Maps 和 Firebase android 插件依赖冲突
- odata - 即使没有新条目,OData 成功消息?
- android - 如何禁用 Android Studio 配置文件
- php - 自定义用户(客户)表密码重置不起作用 - Laravel(使用 API)
- android - 外部应用程序触发的后台服务没有连接