R 将长十六进制字符串拆分为列值并转换为十进制

R 将长十六进制字符串拆分为列值并转换为十进制,r,tidyr,R,Tidyr,对于下面这样的数据帧,我需要通过将hex_字符串列拆分为4个十六进制字符,将其转换为30列-我查看了tidyr,但不知道如何完成,但更喜欢基于tidyr的解决方案。这些十六进制字符需要在最终输出表中进一步转换为十进制值 df <- data.frame( id=c(1,2,3,4), loc=c("loc1", "loc2", "loc2", "loc3"), hex_string = c( "0x005000500050005000400040005000500050

对于下面这样的数据帧,我需要通过将
hex_字符串
列拆分为4个十六进制字符,将其转换为30列-我查看了
tidyr
,但不知道如何完成,但更喜欢基于tidyr的解决方案。这些十六进制字符需要在最终输出表中进一步转换为十进制值

df <- data.frame(
  id=c(1,2,3,4),
  loc=c("loc1", "loc2", "loc2", "loc3"),
  hex_string = c(
    "0x005000500050005000400040005000500050005000500050005000500050005000500050005000500050005000500050005000500050005000500050",
    "0x004000400040004000400040004000400040004000400040800080008000800080008000800080008000800080008000800080008000800080008000",
    "0x01000100010000f000f000f000f000f000f000f000f000f000f000f000f000f00100010000f000f000f000f000f000f000f000f000f000f000f000f0",
    "0x800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000"
    )
  )
df
library(tidyr)

df %>% 
       # remove the hex prefix
       mutate(hex_string = substring(hex_string, 3)) %>% 

       # use separate to split the column into 30 columns
       separate(hex_string, paste("V", 1:30, sep = ""), sep = (1:29) * 4) %>% 

       # add the hex prefix
       mutate_at(vars(starts_with("V")), funs(paste("0x", . , sep = "")))

#  id  loc     V1     V2     V3     V4     V5     V6     V7     V8     V9    V10
#1  1 loc1 0x0050 0x0050 0x0050 0x0050 0x0040 0x0040 0x0050 0x0050 0x0050 0x0050
#2  2 loc2 0x0040 0x0040 0x0040 0x0040 0x0040 0x0040 0x0040 0x0040 0x0040 0x0040
#3  3 loc2 0x0100 0x0100 0x0100 0x00f0 0x00f0 0x00f0 0x00f0 0x00f0 0x00f0 0x00f0
#4  4 loc3 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000
# ... more columns