R语言中孟加拉语Unicode数字转数值及绘图问题求助
解决孟加拉语Unicode数值转换与ggplot绘图问题
嘿,我来帮你搞定这两个头疼的问题!你遇到的核心问题有两个:孟加拉语数字没法直接转成数值,还有ggplot的变量引用写错了,咱们一步步来解决:
一、为什么as.numeric()会出NA警告?
你用的孟加拉语数字(比如৩৪,৭০৮)是Unicode专属的孟加拉语字符,和我们常用的阿拉伯数字(0-9)编码完全不一样,再加上千位分隔符逗号,as.numeric()根本识别不了,只能返回NA。
解决数值转换的办法
我们需要先把孟加拉语数字映射成阿拉伯数字,再去掉逗号,最后转成数值。用stringr包就能轻松搞定:
# 先加载需要的包 library(stringr) library(dplyr) # 模拟你的数据表(如果是从文件读的,记得加stringsAsFactors = FALSE) mb <- data.frame( "সংখ্যা" = c("৩৪,৭০৮", "৩২,৮১০", "৩২,৮৯৪"), "বছর" = c("২০১১", "২০১২", "২০১৪"), stringsAsFactors = FALSE ) # 建立孟加拉语数字到阿拉伯数字的映射表 bengali_to_arabic <- c( "০" = "0", "১" = "1", "২" = "2", "৩" = "3", "৪" = "4", "৫" = "5", "৬" = "6", "৭" = "7", "৮" = "8", "৯" = "9" ) # 转换"সংখ্যা"列:替换数字→删逗号→转数值 mb$সংখ্যা <- mb$সংখ্যা %>% str_replace_all(bengali_to_arabic) %>% str_remove_all(",") %>% as.numeric() # 转换"বছর"列:替换数字→转数值 mb$বছর <- mb$বছর %>% str_replace_all(bengali_to_arabic) %>% as.numeric() # 检查转换结果,确认都是数值类型 str(mb)
运行这段代码后,你会看到两列都变成了num类型,再也不会出现NA警告啦!
二、为什么ggplot绘图无效?
你之前的代码里用了aes("বছর", "সংখ্যা"),这相当于告诉ggplot:用字符串"বছর"当x轴,字符串"সংখ্যা"当y轴——这当然画不出正确的图!你需要引用数据框里的变量,而不是字符串字面量。
正确的ggplot写法
有两种稳妥的方式:
方式1:直接写变量名(推荐)
library(ggplot2) ggplot(mb, aes(x = বছর, y = সংখ্যা)) + geom_bar(stat = "identity", width = 0.3) + labs(x = "বছর", y = "সংখ্যা") # 可选:手动设置轴标签,确保显示孟加拉语
方式2:用.data代词(列名有特殊字符时更安全)
ggplot(mb, aes(x = .data$বছর, y = .data$সংখ্যা)) + geom_bar(stat = "identity", width = 0.3)
这样运行后,就能得到和英文数据一样正常的柱状图了!
额外提醒
- 你代码里的
mb$“সংখ্যা”用了**中文引号**,这会导致R找不到对应的列,一定要改成英文反引号`mb$`সংখ্যা或者直接写mb$সংখ্যা - 如果是从CSV读取数据,记得加上
stringsAsFactors = FALSE参数,避免字符列被自动转成因子类型
内容的提问来源于stack exchange,提问作者polash
相关产品推荐
相关产品推荐

