将数值替换为文本值
Replace numeric values for text values
我有一个 0-8 数值矩阵,我想将其替换为描述性值。我现在的矩阵如下:
Muni<-c("Town1","Town2","Town3","Town4","Town5")
Company1<-c(0,4,2,8,1)
Company2<-c(5,5,0,1,4)
Company3<-c(1:5)
Company4<-c(8,4,3,1,8)
(Matrix<-cbind(Muni,Company1,Company2,Company3,Company4))
# Muni Company1 Company2 Company3 Company4
# [1,] "Town1" "0" "5" "1" "8"
# [2,] "Town2" "4" "5" "2" "4"
# [3,] "Town3" "2" "0" "3" "3"
# [4,] "Town4" "8" "1" "4" "1"
# [5,] "Town5" "1" "4" "5" "8"
我想用以下描述性值替换数值
Response<-c(1:8)
Description<-c("0-1","2-5","6-10","11-15","16-20","21-30","31+","I don't know")
(Values<-cbind(Response,Description))
# Response Description
# [1,] "1" "0-1"
# [2,] "2" "2-5"
# [3,] "3" "6-10"
# [4,] "4" "11-15"
# [5,] "5" "16-20"
# [6,] "6" "21-30"
# [7,] "7" "31+"
# [8,] "8" "I don't know"
我试过了
replace(Matrix,Values$Response,Values$Description)
但我没有得到被初始数字代码替换的新值。
可以使用match
在Values
的Response
列中查找Matrix
的每个元素,然后抓取对应的Description
值:
Matrix[,-1] <- Values[match(Matrix[,-1], Values[,"Response"]),"Description"]
Matrix
# Muni Company1 Company2 Company3 Company4
# [1,] "Town1" NA "16-20" "0-1" "I don't know"
# [2,] "Town2" "11-15" "16-20" "2-5" "11-15"
# [3,] "Town3" "2-5" NA "6-10" "6-10"
# [4,] "Town4" "I don't know" "0-1" "11-15" "0-1"
# [5,] "Town5" "0-1" "11-15" "16-20" "I don't know"
如果您的 Matrix
变量实际上是一个数据框,其中数据存储为因子(如您的评论中所建议),您可以包括对 as.character
和 unlist
的调用:
Mat2[,-1] <- Values[match(as.character(unlist(Mat2[,-1])), Values[,"Response"]),"Description"]
Mat2
# Muni Company1 Company2 Company3 Company4
# 1 Town1 <NA> 16-20 0-1 I don't know
# 2 Town2 11-15 16-20 2-5 11-15
# 3 Town3 2-5 <NA> 6-10 6-10
# 4 Town4 I don't know 0-1 11-15 0-1
# 5 Town5 0-1 11-15 16-20 I don't know
数据:
Mat2 <- data.frame(Muni = c("Town1", "Town2", "Town3", "Town4", "Town5"),
Company1 = factor(c(0,4,2,8,1)),
Company2 = factor(c(5,5,0,1,4)),
Company3 = factor(c(1:5)),
Company4 = factor(c(8,4,3,1,8)))
备选方案dplyr
解决方案
# install.packages("dplyr", dependencies = TRUE)
library(dplyr)
data.frame(Matrix) %>%
mutate_each(funs(Values[,2][match(., Values[,1])]), -Muni)
# Muni Company1 Company2 Company3 Company4
# 1 Town1 <NA> 16-20 0-1 I don't know
# 2 Town2 11-15 16-20 2-5 11-15
# 3 Town3 2-5 <NA> 6-10 6-10
# 4 Town4 I don't know 0-1 11-15 0-1
# 5 Town5 0-1 11-15 16-20 I don't know
如果你想回到一个矩阵,你显然可以做 as.matrix(data.frame(Matrix) %>% mutate_each(funs(Values[,2][match(., Values[,1])]), -Muni))
我有一个 0-8 数值矩阵,我想将其替换为描述性值。我现在的矩阵如下:
Muni<-c("Town1","Town2","Town3","Town4","Town5")
Company1<-c(0,4,2,8,1)
Company2<-c(5,5,0,1,4)
Company3<-c(1:5)
Company4<-c(8,4,3,1,8)
(Matrix<-cbind(Muni,Company1,Company2,Company3,Company4))
# Muni Company1 Company2 Company3 Company4
# [1,] "Town1" "0" "5" "1" "8"
# [2,] "Town2" "4" "5" "2" "4"
# [3,] "Town3" "2" "0" "3" "3"
# [4,] "Town4" "8" "1" "4" "1"
# [5,] "Town5" "1" "4" "5" "8"
我想用以下描述性值替换数值
Response<-c(1:8)
Description<-c("0-1","2-5","6-10","11-15","16-20","21-30","31+","I don't know")
(Values<-cbind(Response,Description))
# Response Description
# [1,] "1" "0-1"
# [2,] "2" "2-5"
# [3,] "3" "6-10"
# [4,] "4" "11-15"
# [5,] "5" "16-20"
# [6,] "6" "21-30"
# [7,] "7" "31+"
# [8,] "8" "I don't know"
我试过了
replace(Matrix,Values$Response,Values$Description)
但我没有得到被初始数字代码替换的新值。
可以使用match
在Values
的Response
列中查找Matrix
的每个元素,然后抓取对应的Description
值:
Matrix[,-1] <- Values[match(Matrix[,-1], Values[,"Response"]),"Description"]
Matrix
# Muni Company1 Company2 Company3 Company4
# [1,] "Town1" NA "16-20" "0-1" "I don't know"
# [2,] "Town2" "11-15" "16-20" "2-5" "11-15"
# [3,] "Town3" "2-5" NA "6-10" "6-10"
# [4,] "Town4" "I don't know" "0-1" "11-15" "0-1"
# [5,] "Town5" "0-1" "11-15" "16-20" "I don't know"
如果您的 Matrix
变量实际上是一个数据框,其中数据存储为因子(如您的评论中所建议),您可以包括对 as.character
和 unlist
的调用:
Mat2[,-1] <- Values[match(as.character(unlist(Mat2[,-1])), Values[,"Response"]),"Description"]
Mat2
# Muni Company1 Company2 Company3 Company4
# 1 Town1 <NA> 16-20 0-1 I don't know
# 2 Town2 11-15 16-20 2-5 11-15
# 3 Town3 2-5 <NA> 6-10 6-10
# 4 Town4 I don't know 0-1 11-15 0-1
# 5 Town5 0-1 11-15 16-20 I don't know
数据:
Mat2 <- data.frame(Muni = c("Town1", "Town2", "Town3", "Town4", "Town5"),
Company1 = factor(c(0,4,2,8,1)),
Company2 = factor(c(5,5,0,1,4)),
Company3 = factor(c(1:5)),
Company4 = factor(c(8,4,3,1,8)))
备选方案dplyr
解决方案
# install.packages("dplyr", dependencies = TRUE)
library(dplyr)
data.frame(Matrix) %>%
mutate_each(funs(Values[,2][match(., Values[,1])]), -Muni)
# Muni Company1 Company2 Company3 Company4
# 1 Town1 <NA> 16-20 0-1 I don't know
# 2 Town2 11-15 16-20 2-5 11-15
# 3 Town3 2-5 <NA> 6-10 6-10
# 4 Town4 I don't know 0-1 11-15 0-1
# 5 Town5 0-1 11-15 16-20 I don't know
如果你想回到一个矩阵,你显然可以做 as.matrix(data.frame(Matrix) %>% mutate_each(funs(Values[,2][match(., Values[,1])]), -Muni))