首页 > 解决方案 > 在R中将2s补码/有符号二进制转换为int

问题描述

我从 ADC IC 接收 16 位 2s 补码或带符号二进制。当我收到数据时,它看起来像这样

时间戳、IP、频率、传感器、数据
132493498543616929、10.0.0.236、600.000、321、-8739

132493498543626902, 10.0.0.236, 600.000, 321, -8739

132493498543636875, 10.0.0.236, 600.000, 321, -8739
132493498543636875, 10.0.0.236, 600.000, 321, -13108
132493498543656828, 10.0.0.236, 600.000, 321, -8739
132493498543666795, 10.0.0.236, 600.000, 321, -21846
132493498543676768, 10.0.0.236、600.000、321、-21846
132493498543676768、10.0.0.236、600.000、321、
-21846 132493498543686741、10.0.0.236、600.0460、31

我想将其转换为签名二进制我的最小可重现代码如下

 library(binaryLogic)
 as.binary(-21846, signed=TRUE, logic=FALSE)
 [1] 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0

这给了我我想要的二进制值,但是,当我将它用作

Data_as_Binary <- as.binary(-21846, signed=TRUE, logic=FALSE)
Data_as_Binary
TRUE
FALSE
TRUE 
FALSE
TRUE
FALSE

我有 16000 多个值需要在数据框中进行转换,当我使用 mutate 或 tidyverse 中的任何内容时,它会返回一个列表 如何将其折叠成单个变量
,将其转换为十六进制没问题,但我必须将其转换为二进制所以现在我已经把它变成了二进制,但我需要在最低有效位上加一个 1 我如何在数据帧中做到这一点?谢谢阿曼达

标签: rbinaryadc16-bit

解决方案


这是我自己想出的,给了我想要的

 Data_as_bianary<- as.binary(RF_PWR_OFF_600$Data, signed = TRUE, size=2)
  

df<-as.data.frame(Data_as_bianary)
  
df <- as.data.frame(matrix(unlist(Data_as_bianary), ncol = 16))


df_2<-1*df

df_3<-(!df_2)*1

RF_PWR_OFF_600$DAta_to_bin  <- apply( df_3[ , 1:16 ] , 1 , paste , collapse = "" )


RF_PWR_OFF_600 <- RF_PWR_OFF_600%>%
  select(DAta_to_bin) %>%
  mutate_if(is.character,as.numeric) 

推荐阅读