使用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
相关产品推荐
相关产品推荐

