You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:36:09