我是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位。
答案 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