数据框中的hex2bin

时间:2016-02-04 10:29:14

标签: r

我是R的新手,对数据管理和演示的所有可能性感到兴奋。 实际上我有一个问题,但没有找到任何解决方案:

我已经建立了一个数据框:

require(BMS)
n = c(1, 2, 3, 4, 5, 6, 7, 8)
s = c("55aa55aa", "aa55aa55", "12345678", "9ABCDEF0", "55aa55aa", "aa55aa55", "12345678", "9ABCDEF0")
df = data.frame(n, s)
df$s <- as.character(df$s)
df
#   n        s
# 1 1 55aa55aa
# 2 2 aa55aa55
# 3 3 12345678
# 4 4 9ABCDEF0
# 5 5 55aa55aa
# 6 6 aa55aa55
# 7 7 12345678
# 8 8 9ABCDEF0

s是一个32位十六进制值,我想将其作为实际位字符串添加到数据帧作为新列sbin。 之后看起来应该是这样的:

df
#   n        s                             sbin
# 1 1 55aa55aa 01010101101010100101010110101010
# 2 2 aa55aa55 10101010010101011010101001010101
# 3 3 12345678 00010010001101000101011001111000
# 4 4 9ABCDEF0 .......
# 5 5 55aa55aa ......
# 6 6 aa55aa55
# 7 7 12345678
# 8 8 9ABCDEF0

对于转换,我喜欢使用“BMS”包中的“hex2bin”功能。

我试过这个

lapply(df$s, hex2bin)
# [[1]]
#  [1] 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0

# [[2]]
#  [1] 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1

# [[3]]
#  [1] 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0

# .....

但未获得所需的输出。

最后,我想访问数据帧行中的每个位。所以我想在这个例子中得到32个向量,每个向量8位。

1 个答案:

答案 0 :(得分:1)

这个怎么样?

df$sbin <- sapply(df$s, FUN = function(x) { paste(hex2bin(x), collapse = "") })

# n        s                             sbin
# 1 1 55aa55aa 01010101101010100101010110101010
# 2 2 aa55aa55 10101010010101011010101001010101
# 3 3 12345678 00010010001101000101011001111000
# 4 4 9ABCDEF0 10011010101111001101111011110000
# 5 5 55aa55aa 01010101101010100101010110101010
# 6 6 aa55aa55 10101010010101011010101001010101
# 7 7 12345678 00010010001101000101011001111000
# 8 8 9ABCDEF0 10011010101111001101111011110000