2016-02-04 5 views
0

Я новичок в R и взволнован обо всех возможностях управления данными и презентации. На самом деле у меня есть проблемы и не нашел решения:hex2bin в фрейме данных

Я построил кадр данных с:

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 

Для преобразования Я хотел бы использовать функцию «HEX2BIN» из пакета «BMS».

Я попробовал этот

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

Хм вы имеете в виду, как 'mapply (HEX2BIN, ДФ $ s)' или 'do.call (cbind, lapply (ДФ $ s, HEX2BIN))'? Это матрицы, в которых вы можете легко получить доступ к каждой строке («вектор») или к биту (ячейке). – lukeA

ответ

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 
+0

Спасибо dikesh, это именно то, что я хотел ;-)) – Juppes

Смежные вопросы