我正在使用 R 編程語言。
考慮以下難題:

我一直想知道以下是否可能 - 假設我有這些資料:
id = c(1,2,3)
names = c("john", "tim", "alex")
country = c("Canada", "England", "Mexico")
my_data = data.frame(id, names, country)
id names country
1 1 john Canada
2 2 tim England
3 3 alex Mexico
我一直想知道是否有可能從這些資料中制作一個“謎題”。例如,是否可以用隨機字母/數字替換名稱和國家,然后記錄此替換的“轉換密鑰”是什么?例如:
# output 1: sample output
id names country
1 1 h37ubL 998ggg6ppggg6h8ggg6
# output 2: sample conversion key
original coded
1 j h3
2 o 7
3 h ub
4 n L
5 C 998
6 a ggg6
7 n pp
8 a ggg6
9 d h8
10 a ggg6
在 R 中這樣的事情是否可能 - 為所有可能的字符(例如字母(大寫、小寫)、數字、重音符號、破折號、逗號、特殊符號等)創建一個“鍵”,但空格除外?(即應保留原件中的空格)
謝謝!
uj5u.com熱心網友回復:
在 R 中撰寫替換密碼并不難。在下面的可列印 ASCII 字符示例中,將字母表打亂,并將其保留為鍵。不要忘記不要打亂空格字符,ASCII 字符 nr 32。
然后相同的函式可以通過將訊息中的字符與字母匹配并使用該匹配來索引密碼密鑰來加密和解密。解密只是交換key和alphabet.
下面的代碼使用發布到R-bloggers的兩個函式來獲取 ASCII 字符。
1. 字母表
asc <- function(x) { strtoi(charToRaw(x), 16L) }
chr <- function(n) { rawToChar(as.raw(n)) }
ascii_printable <- 32:126
ascii_chars <- sapply(ascii_printable, chr)
data.frame(number = 32:126, char = ascii_chars)
#> number char
#> 1 32
#> 2 33 !
#> 3 34 "
#> 4 35 #
#> 5 36 $
#> 6 37 %
#> 7 38 &
#> 8 39 '
#> 9 40 (
#> 10 41 )
#> 11 42 *
#> 12 43
#> 13 44 ,
#> 14 45 -
#> 15 46 .
#> 16 47 /
#> 17 48 0
#> 18 49 1
#> 19 50 2
#> 20 51 3
#> 21 52 4
#> 22 53 5
#> 23 54 6
#> 24 55 7
#> 25 56 8
#> 26 57 9
#> 27 58 :
#> 28 59 ;
#> 29 60 <
#> 30 61 =
#> 31 62 >
#> 32 63 ?
#> 33 64 @
#> 34 65 A
#> 35 66 B
#> 36 67 C
#> 37 68 D
#> 38 69 E
#> 39 70 F
#> 40 71 G
#> 41 72 H
#> 42 73 I
#> 43 74 J
#> 44 75 K
#> 45 76 L
#> 46 77 M
#> 47 78 N
#> 48 79 O
#> 49 80 P
#> 50 81 Q
#> 51 82 R
#> 52 83 S
#> 53 84 T
#> 54 85 U
#> 55 86 V
#> 56 87 W
#> 57 88 X
#> 58 89 Y
#> 59 90 Z
#> 60 91 [
#> 61 92 \\
#> 62 93 ]
#> 63 94 ^
#> 64 95 _
#> 65 96 `
#> 66 97 a
#> 67 98 b
#> 68 99 c
#> 69 100 d
#> 70 101 e
#> 71 102 f
#> 72 103 g
#> 73 104 h
#> 74 105 i
#> 75 106 j
#> 76 107 k
#> 77 108 l
#> 78 109 m
#> 79 110 n
#> 80 111 o
#> 81 112 p
#> 82 113 q
#> 83 114 r
#> 84 115 s
#> 85 116 t
#> 86 117 u
#> 87 118 v
#> 88 119 w
#> 89 120 x
#> 90 121 y
#> 91 122 z
#> 92 123 {
#> 93 124 |
#> 94 125 }
#> 95 126 ~
使用reprex v2.0.2創建于 2022-11-13
2. cypher函式及表
請注意,空格保留為下表中的第一個字符,它不會與sample.
encrypt <- function(x, key, alphabet = ascii_chars) {
s <- strsplit(x, "")
sapply(s, \(y) {
i <- match(y, alphabet)
paste(key[i], collapse = "")
})
}
set.seed(2022)
coded <- c(" ", sample(ascii_chars[-1]))
data.frame(number = 32:126, char = ascii_chars, coded)
#> number char coded
#> 1 32
#> 2 33 ! S
#> 3 34 " n
#> 4 35 # W
#> 5 36 $ k
#> 6 37 % d
#> 7 38 & &
#> 8 39 ' _
#> 9 40 ( }
#> 10 41 ) .
#> 11 42 * '
#> 12 43 |
#> 13 44 , e
#> 14 45 - !
#> 15 46 . ~
#> 16 47 / @
#> 17 48 0 a
#> 18 49 1 =
#> 19 50 2 ,
#> 20 51 3 \\
#> 21 52 4 L
#> 22 53 5 f
#> 23 54 6 x
#> 24 55 7 6
#> 25 56 8 s
#> 26 57 9
#> 27 58 : 4
#> 28 59 ; ^
#> 29 60 < #
#> 30 61 = w
#> 31 62 > B
#> 32 63 ? (
#> 33 64 @ M
#> 34 65 A J
#> 35 66 B G
#> 36 67 C A
#> 37 68 D ?
#> 38 69 E 3
#> 39 70 F X
#> 40 71 G r
#> 41 72 H Z
#> 42 73 I U
#> 43 74 J R
#> 44 75 K I
#> 45 76 L T
#> 46 77 M c
#> 47 78 N p
#> 48 79 O *
#> 49 80 P l
#> 50 81 Q C
#> 51 82 R :
#> 52 83 S g
#> 53 84 T i
#> 54 85 U 0
#> 55 86 V 7
#> 56 87 W [
#> 57 88 X %
#> 58 89 Y z
#> 59 90 Z "
#> 60 91 [ 8
#> 61 92 \\ D
#> 62 93 ] 1
#> 63 94 ^ m
#> 64 95 _ /
#> 65 96 ` 2
#> 66 97 a K
#> 67 98 b ]
#> 68 99 c -
#> 69 100 d v
#> 70 101 e y
#> 71 102 f Y
#> 72 103 g P
#> 73 104 h q
#> 74 105 i `
#> 75 106 j h
#> 76 107 k Q
#> 77 108 l 9
#> 78 109 m O
#> 79 110 n ;
#> 80 111 o u
#> 81 112 p )
#> 82 113 q j
#> 83 114 r {
#> 84 115 s V
#> 85 116 t H
#> 86 117 u $
#> 87 118 v o
#> 88 119 w 5
#> 89 120 x F
#> 90 121 y >
#> 91 122 z N
#> 92 123 { b
#> 93 124 | E
#> 94 125 } t
#> 95 126 ~ <
使用reprex v2.0.2創建于 2022-11-13
3. 編碼資料
test_with_spaces <- "hello world!"
(e <- encrypt(test_with_spaces, coded, ascii_chars))
#> [1] "qy99u 5u{9vS"
encrypt(e, ascii_chars, coded)
#> [1] "hello world!"
my_data[-1] <- lapply(my_data[-1], encrypt, key = coded, alphabet = ascii_chars)
my_data
#> id names country
#> 1 1 huq; AK;KvK
#> 2 2 H`O 3;P9K;v
#> 3 3 K9yF cyF`-u
my_data[-1] <- lapply(my_data[-1], encrypt, key = ascii_chars, alphabet = coded)
my_data
#> id names country
#> 1 1 john Canada
#> 2 2 tim England
#> 3 3 alex Mexico
使用reprex v2.0.2創建于 2022-11-13
4.備用鑰匙
列舉整個密鑰表的另一種方法是讓一個數字(一個密鑰)設定偽 RNG 的種子。之后,該函式將從set.seed(key)生成向量。適應使用這個變數很簡單。codedalphabetencrypt
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/532427.html
標籤:r数据操作
上一篇:SpringJPACriteriaBuilder未生成正確的SQL
下一篇:一個字串中有多少個數字是連續的
