将数字值替换为文本值 [英] Replace numeric values for text values

查看:86
本文介绍了将数字值替换为文本值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个0-8的数值矩阵,我想用描述性值代替.我当前的矩阵如下:

I have a matrix of number values of 0-8 which I would like to replace with descriptive values. My current matrix is as follows:

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"  

我想用以下描述性值替换数字值

I would like to replace the numeric values with the following descriptive values

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)

但不能将新值替换为初始数字代码.

but am not getting the new values being replaced by the initial numeric code.

推荐答案

您可以使用matchValuesResponse列中查找Matrix的每个元素,然后获取相应的Description值:

You can use match to look up each element of Matrix in the Response column of Values and then grabbing the corresponding Description value:

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.characterunlist的调用:

If instead your Matrix variable were really a data frame with the data stored as factors (as suggested in your comments), you could include a call to as.character and 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)))

这篇关于将数字值替换为文本值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆