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

使用tidyr包gather函数整理Facebook Insights数据集遇问题求助

解决R语言中Facebook Insights数据整理的gather问题

我明白你踩的这个坑啦——默认调用gather()时,它会把所有列都纳入转换范围,所以才会把Video_ID不小心塞到value列里。咱们只需要明确告诉函数哪些列要转换(或者哪些列要排除),就能得到你想要的三列结构(Video_ID、Location、Value)。

先模拟你的原始数据集(方便你测试)

df <- data.frame(
  Video_ID = 1:7,
  `Albania (AL)` = c(88,2,82,45,14,78,47),
  `Algeria (DZ)` = c(79,29,67,41,78,71,13),
  `Argentina (AR)` = c(43,71,91,69,83,39,87)
)

方法1:用gather()排除不需要转换的列

直接用-Video_ID指定要排除的列,剩下的国家列就会被转换成你需要的Location和Value:

library(tidyr)
tidydata <- gather(df, key = "Location", value = "Value", -Video_ID)

方法2:用gather()指定要转换的列位置

如果你清楚国家列的位置(这里是第2到第4列),也可以直接指定列范围:

tidydata <- gather(df, key = "Location", value = "Value", 2:4)

更推荐的现代方法:pivot_longer()

从tidyr 1.0.0版本开始,pivot_longer()是gather()的替代函数,参数命名更直观,不容易出错:

tidydata <- pivot_longer(df, 
                         cols = -Video_ID,  # 排除Video_ID列
                         names_to = "Location",  # 原列名存到Location列
                         values_to = "Value")    # 原数值存到Value列

转换后的结果示例

你会得到这样的整洁数据集:

Video_ID Location Value
1 1 Albania (AL) 88
2 1 Algeria (DZ) 79
3 1 Argentina (AR) 43
4 2 Albania (AL) 2
...(后续行以此类推)

内容的提问来源于stack exchange,提问作者eagle23

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:20:37