Mysql SQL或R:查找并显示所有';1';从具有二进制数据类型的列中删除,并存储在另一个或多个列中
我正在使用一个名为“data_1”的表,其中一列“col_1”具有二进制数据类型(例如,1100000)Mysql SQL或R:查找并显示所有';1';从具有二进制数据类型的列中删除,并存储在另一个或多个列中,mysql,r,indexing,binary,Mysql,R,Indexing,Binary,我正在使用一个名为“data_1”的表,其中一列“col_1”具有二进制数据类型(例如,1100000) 我想从此列获取所有“1”的位置(索引),并将它们存储在另一列或更多列中 输出可以是: 1) “col_2”存储值6和7,表示索引6和7中有“1” 2) 或者我们可以将输出存储在多列“pos_1”、“pos_2”、“pos_3”、“pos_4”、“pos_5”、“pos_6”、“pos_7”中,并带有值(0、0、0、0、1、1),这意味着索引6和7中有“1”,其余位置为“0” 我们如何在mys
我想从此列获取所有“1”的位置(索引),并将它们存储在另一列或更多列中 输出可以是: 1) “col_2”存储值6和7,表示索引6和7中有“1” 2) 或者我们可以将输出存储在多列“pos_1”、“pos_2”、“pos_3”、“pos_4”、“pos_5”、“pos_6”、“pos_7”中,并带有值(0、0、0、0、1、1),这意味着索引6和7中有“1”,其余位置为“0” 我们如何在mysql或R中实现 我试过: 在R中,我尝试了应用于“col_1”的以下函数,但它不起作用
convert_to_binary <- function(n) {
if(n > 1) {
convert_to_binary(as.integer(n/2))
}
cat(n %% 2)
}
data_1$col_2 <- convert_to_binary(data_1$col_1)
有什么建议吗
谢谢 以下是R中的一个解决方案:
col_1<-c(1100000, 1100001, 1100100)
data_1 <- data.frame(col_1)
as.character(data_1$col_1) -> data_1$col_1
position<-function(x){unlist(gregexpr(pattern ='1',x))}
data_1$col_2 <- sapply(data_1$col_1, function(x) position(x))
as.character(data_1$col_2) -> data_1$col_2
gsub(":", ",", data_1$col_2) -> data_1$col_2
gsub("c", "", data_1$col_2) -> data_1$col_2
列1数据列1$列2
希望它能帮助您以下是R中的一个解决方案:
col_1<-c(1100000, 1100001, 1100100)
data_1 <- data.frame(col_1)
as.character(data_1$col_1) -> data_1$col_1
position<-function(x){unlist(gregexpr(pattern ='1',x))}
data_1$col_2 <- sapply(data_1$col_1, function(x) position(x))
as.character(data_1$col_2) -> data_1$col_2
gsub(":", ",", data_1$col_2) -> data_1$col_2
gsub("c", "", data_1$col_2) -> data_1$col_2
列1数据列1$列2
希望它能帮助您这里是MySQL中的一个解决方案,假设数字长度为7个字符。如果可行,可以添加更多的
子字符串表达式
SELECT
col_1,
SUBSTRING(col_1, 1,1) AS pos_1,
SUBSTRING(col_1, 2,1) AS pos_2,
SUBSTRING(col_1, 3,1) AS pos_3,
SUBSTRING(col_1, 4,1) AS pos_4,
SUBSTRING(col_1, 5,1) AS pos_5,
SUBSTRING(col_1, 6,1) AS pos_6,
SUBSTRING(col_1, 7,1) AS pos_7
FROM data_1;
或
SELECT
col_1,
CONCAT_WS(",",
CASE WHEN SUBSTRING(col_1, 1,1)=1 THEN 1 END,
CASE WHEN SUBSTRING(col_1, 2,1)=1 THEN 2 END,
CASE WHEN SUBSTRING(col_1, 3,1)=1 THEN 3 END,
CASE WHEN SUBSTRING(col_1, 4,1)=1 THEN 4 END,
CASE WHEN SUBSTRING(col_1, 5,1)=1 THEN 5 END,
CASE WHEN SUBSTRING(col_1, 6,1)=1 THEN 6 END,
CASE WHEN SUBSTRING(col_1, 7,1)=1 THEN 7 END) AS col_2
FROM data_1;
这里是MySQL中的一个解决方案,假设数字长度为7个字符。如果可行,可以添加更多的子字符串表达式
SELECT
col_1,
SUBSTRING(col_1, 1,1) AS pos_1,
SUBSTRING(col_1, 2,1) AS pos_2,
SUBSTRING(col_1, 3,1) AS pos_3,
SUBSTRING(col_1, 4,1) AS pos_4,
SUBSTRING(col_1, 5,1) AS pos_5,
SUBSTRING(col_1, 6,1) AS pos_6,
SUBSTRING(col_1, 7,1) AS pos_7
FROM data_1;
或
SELECT
col_1,
CONCAT_WS(",",
CASE WHEN SUBSTRING(col_1, 1,1)=1 THEN 1 END,
CASE WHEN SUBSTRING(col_1, 2,1)=1 THEN 2 END,
CASE WHEN SUBSTRING(col_1, 3,1)=1 THEN 3 END,
CASE WHEN SUBSTRING(col_1, 4,1)=1 THEN 4 END,
CASE WHEN SUBSTRING(col_1, 5,1)=1 THEN 5 END,
CASE WHEN SUBSTRING(col_1, 6,1)=1 THEN 6 END,
CASE WHEN SUBSTRING(col_1, 7,1)=1 THEN 7 END) AS col_2
FROM data_1;
“将它们存储在另一个或多个列中”--跨列喷洒数组是“坏”模式设计。MySQL列的数据类型是什么?“将它们存储在另一个或多个列中”--跨列喷洒数组是“坏”模式设计。MySQL列的数据类型是什么?谢谢!这样,我们只需要使它们的长度与前一步相同。@CrubalChenxiLi更正。我又增加了一种方法,只增加了col_2tank!这样,我们只需要使它们的长度与前一步相同。@CrubalChenxiLi更正。我又增加了一种方法,只增加了col_2