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