Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL或R:查找并显示所有';1';从具有二进制数据类型的列中删除,并存储在另一个或多个列中_Mysql_R_Indexing_Binary - Fatal编程技术网

Mysql SQL或R:查找并显示所有';1';从具有二进制数据类型的列中删除,并存储在另一个或多个列中

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

我正在使用一个名为“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”

我们如何在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