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

如何转换DataFrame并绘制多术语时间维度词频折线图?

解决方法:将长格式数据转换为宽格式(或直接用长格式绘图)

你需要把当前长格式的DataFrame(每行对应一个日期-词汇的频率记录)调整为适合绘制多系列折线图的结构,下面是具体实现方案:

1. 用tidyr包将长格式转宽格式

如果坚持要把每个词汇转为单独列,可以用tidyverse工具集里的pivot_wider函数完成转换:

# 加载必要的包
library(tidyr)
library(dplyr)

# 对示例数据进行长转宽操作,缺失的日期-词汇组合用0填充
wide_data <- examp.data %>%
  pivot_wider(
    id_cols = date,          # 作为行索引的列:日期
    names_from = term,       # 转为列名的字段:词汇
    values_from = freq,      # 填充列的数值:频率
    values_fill = 0          # 缺失值填充为0
  )

转换后的宽格式数据结构如下:

dateengineeringbiologyphysicsmathematicscomputer
2012-01-017320000
2013-09-230917000
2014-11-150024100
2014-05-110006010
2015-03-270000692

2. 直接用长格式绘制多系列折线图(推荐)

其实用ggplot2可以直接基于原始长格式数据绘图,无需转换格式,更符合tidyverse的逻辑,能直接生成你需要的多系列折线图:

library(ggplot2)

ggplot(examp.data, aes(x = date, y = freq, color = term)) +
  geom_line(linewidth = 1) +
  geom_point(size = 2) + # 可选:添加数据点增强可读性
  labs(
    x = "日期",
    y = "词汇出现频率",
    title = "社交媒体词汇频率趋势",
    color = "词汇类型"
  ) +
  theme_minimal()

这段代码会自动按term区分不同折线系列,并生成对应图例,和你目标图表的效果一致。

3. 基础绘图包实现(基于宽格式数据)

如果习惯用R基础绘图包,基于转换后的宽格式数据可以这样绘制:

# 先按日期排序
wide_data <- wide_data %>% arrange(date)

# 初始化绘图
plot(wide_data$date, wide_data$engineering, type = "l", col = "darkred",
     xlab = "日期", ylab = "出现频率", main = "社交媒体词汇频率趋势")
# 依次添加其他词汇的折线
lines(wide_data$date, wide_data$biology, col = "steelblue")
lines(wide_data$date, wide_data$physics, col = "forestgreen")
lines(wide_data$date, wide_data$mathematics, col = "orange")
lines(wide_data$date, wide_data$computer, col = "purple")
# 添加图例
legend("topright", names(wide_data)[-1], col = c("darkred","steelblue","forestgreen","orange","purple"), lty = 1)

内容的提问来源于stack exchange,提问作者Juan de Dios Fernandez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:51:18