将数字转换为 data.frame 中的字母
convert numbers to letters in a data.frame
在 R 中,我有一些数字矩阵,我要将每个数字转换为对应的字母; 1 到 "a"、2 到 "b",依此类推。
假设这是矩阵:
set.seed(1)
x <- data.frame(matrix(sample(1:16,12,T),nrow=3,ncol=4))
# X1 X2 X3 X4
#1 5 15 16 1
#2 6 4 11 4
#3 10 15 11 3
这是预期的输出:
# X1 X2 X3 X4
#1 e o p a
#2 f d k d
#3 j o k c
我使用了 letters[x]
和 letters[list(x)]
但它给了这个
Error in letters[list(x)] : invalid subscript type 'list'
首先将数据框转换为普通向量,然后可以用来下标letters
。然后用该向量替换 x
的内容。通过使用 replace
我们可以避免覆盖原来的 x
.
replace(x, TRUE, letters[unlist(x)])
给予:
X1 X2 X3 X4
1 e o p a
2 f d k d
3 j o k c
将 'x' 转换为 matrix
后,将其用作 built-in letters
的索引并将其分配给原始数据集
x[] <- letters[as.matrix(x)]
x
# X1 X2 X3 X4
#1 e o p a
#2 f d k d
#3 j o k c
或者这可以通过 tidyverse
来完成
library(dplyr)
x %>%
mutate_all(funs(letters[.]))
也可以使用sapply
:
sapply(x, function(i) letters[i])
# X1 X2 X3 X4
# [1,] "e" "o" "p" "a"
# [2,] "f" "d" "k" "d"
# [3,] "j" "o" "k" "c"
在 R 中,我有一些数字矩阵,我要将每个数字转换为对应的字母; 1 到 "a"、2 到 "b",依此类推。
假设这是矩阵:
set.seed(1)
x <- data.frame(matrix(sample(1:16,12,T),nrow=3,ncol=4))
# X1 X2 X3 X4
#1 5 15 16 1
#2 6 4 11 4
#3 10 15 11 3
这是预期的输出:
# X1 X2 X3 X4
#1 e o p a
#2 f d k d
#3 j o k c
我使用了 letters[x]
和 letters[list(x)]
但它给了这个
Error in letters[list(x)] : invalid subscript type 'list'
首先将数据框转换为普通向量,然后可以用来下标letters
。然后用该向量替换 x
的内容。通过使用 replace
我们可以避免覆盖原来的 x
.
replace(x, TRUE, letters[unlist(x)])
给予:
X1 X2 X3 X4
1 e o p a
2 f d k d
3 j o k c
将 'x' 转换为 matrix
后,将其用作 built-in letters
的索引并将其分配给原始数据集
x[] <- letters[as.matrix(x)]
x
# X1 X2 X3 X4
#1 e o p a
#2 f d k d
#3 j o k c
或者这可以通过 tidyverse
library(dplyr)
x %>%
mutate_all(funs(letters[.]))
也可以使用sapply
:
sapply(x, function(i) letters[i])
# X1 X2 X3 X4
# [1,] "e" "o" "p" "a"
# [2,] "f" "d" "k" "d"
# [3,] "j" "o" "k" "c"