gpt4 book ai didi

r - 如何按年份和绘图从一列中查找多个 ID 的频率?

转载 作者:行者123 更新时间:2023-12-02 16:12:08 25 4
gpt4 key购买 nike

我有一个 df 看起来像

<表类="s-表"><头>ID年份<正文>民族,民族 - 北美,经济,经济 - 亚洲2008经济,经济 - 欧盟,州,民族2009

我想提取 ID 的频率,使其看起来像

<表类="s-表"><头>国家经济状态年份<正文>22020081212009

对于像“Economy - EU”这样带有连字符的 ID,我只想将其计为“Economy”的频率

我的最终目标是按年绘制此 df,并在同一图中使用不同 ID 的频率计数。例如,“State”在 2008 年是绿点,“Nation”在 2008 年是红点,“Economy”在 2008 年是蓝点。

如果第二个 df 不是一个好的方法,我也愿意接受建议!这只是我对如何开始这件事的第一个想法。

如果这不合适,我会将此帖子作为一个单独的问题,但我的下一个问题是如何按年绘制第二个 df 的频率,如上所述?

谢谢!

最佳答案

您可以使用 separate_rows 以逗号 (,) 拆分将数据拆分为不同的行。将-后的值分隔在不同的列中,并计算每个YearID值的出现次数,得到宽格式的数据。

library(dplyr)
library(tidyr)

df %>%
separate_rows(ID, sep = ',\\s*') %>%
separate(ID, c('ID', 'Value'), sep = '\\s*-\\s*',fill = 'right') %>%
count(Year, ID) %>%
pivot_wider(names_from = ID, values_from = n, values_fill = 0)

# Year Economy Nation State
# <int> <int> <int> <int>
#1 2008 2 2 0
#2 2009 2 1 1

您还可以使用 janitor::tabyl 来减少代码。

df %>%
separate_rows(ID, sep = ',\\s*') %>%
separate(ID, c('ID', 'Value'), sep = '\\s*-\\s*',fill = 'right') %>%
janitor::tabyl(Year, ID)

数据

df <- structure(list(ID = c("Nation, Nation - NA, Economy, Economy - Asia", 
"Economy, Economy - EU, State, Nation"), Year = 2008:2009),
class = "data.frame", row.names = c(NA, -2L))

关于r - 如何按年份和绘图从一列中查找多个 ID 的频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67715526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com