将长十六进制字符串拆分为列值并转换为十进制
split long hex string into column values and convert to decimal
使用如下所示的数据框,我需要将 hex_string
列转换为 30 列,方法是将它们分成 4 个十六进制字符 - 我为此查看了 tidyr
,但了解不够完成这项工作,但更喜欢基于 tidyr 的解决方案。这些十六进制字符需要在最终输出中进一步转换为十进制值 table.
df <- data.frame(
id=c(1,2,3,4),
loc=c("loc1", "loc2", "loc2", "loc3"),
hex_string = c(
"0x005000500050005000400040005000500050005000500050005000500050005000500050005000500050005000500050005000500050005000500050",
"0x004000400040004000400040004000400040004000400040800080008000800080008000800080008000800080008000800080008000800080008000",
"0x01000100010000f000f000f000f000f000f000f000f000f000f000f000f000f00100010000f000f000f000f000f000f000f000f000f000f000f000f0",
"0x800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000"
)
)
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
使用如下所示的数据框,我需要将 hex_string
列转换为 30 列,方法是将它们分成 4 个十六进制字符 - 我为此查看了 tidyr
,但了解不够完成这项工作,但更喜欢基于 tidyr 的解决方案。这些十六进制字符需要在最终输出中进一步转换为十进制值 table.
df <- data.frame(
id=c(1,2,3,4),
loc=c("loc1", "loc2", "loc2", "loc3"),
hex_string = c(
"0x005000500050005000400040005000500050005000500050005000500050005000500050005000500050005000500050005000500050005000500050",
"0x004000400040004000400040004000400040004000400040800080008000800080008000800080008000800080008000800080008000800080008000",
"0x01000100010000f000f000f000f000f000f000f000f000f000f000f000f000f00100010000f000f000f000f000f000f000f000f000f000f000f000f0",
"0x800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000800080008000"
)
)
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