【问题标题】:Count/plot changes over time for a variable in panel data with RR 面板数据中变量的计数/绘图随时间变化
【发布时间】:2021-02-06 10:34:56
【问题描述】:

我对 R 比较陌生,并且遇到了一个实际上很简单的事情。我有面板数据,我想绘制或计算有多少观察单元随着时间的推移经历特定变量的变化。数据如下所示:

statename,from,to,id,x
United States,1946,1965,201000,
United States,1946,1965,202000,
United States,1946,1965,203000,false
United States,1970,1973,203000,true
United States,1946,1965,204000,
United States,1946,1965,205000,true

所以,准确地说,我想知道有多少ids 经历了x 的变化和/或有多少一直有true 对于x,有多少一直有falsex

如果x 至少是一次truefalse 至少一次,我试图创建一个等于 1 的虚拟变量,即,如果有变化。但是,它没有用。我还尝试使用 table()aggregate()group_by()count() 函数(部分组合)来解决问题,但我就是没有得到我想要的。

有人可以帮忙吗?

【问题讨论】:

  • 您的预期输出是什么?剧情?或者你在找一张桌子?我不清楚。你能提供一个示例输出吗?

标签: r panel-data


【解决方案1】:

使其可重现:

my_data <- read.csv(text=
"statename,from,to,id,x
United States,1946,1965,201000,
United States,1946,1965,202000,
United States,1946,1965,203000,false
United States,1970,1973,203000,true
United States,1946,1965,204000,
United States,1946,1965,205000,true", header=TRUE)

这是一个使用包dplyr和函数mutate()lag()的解决方案:

library(dplyr)
my_data <- my_data %>%
  group_by(id) %>%
  mutate(xChanged = case_when(x != lag(x) ~ "Yes", TRUE ~ "No")) %>%
  as.data.frame()

一步一步,这是上面代码的作用:

  1. 它将您的数据按id 分组。
  2. 然后它使用lag() 函数查找x 的先前值。
  3. 如果x 与之前的x 不同,则在xChanged 列中输入“是”。
  4. 否则,在xChanged列中输入“否”

输出将如下所示:

> my_data
      statename from   to     id     x xChanged
1 United States 1946 1965 201000             No
2 United States 1946 1965 202000             No
3 United States 1946 1965 203000 false       No
4 United States 1970 1973 203000  true      Yes
5 United States 1946 1965 204000             No
6 United States 1946 1965 205000  true       No

现在您可以计算xChanged 中有多少个“是”。

nrow(my_data[my_data$xChanged == "Yes",])

结果:1​​。

【讨论】:

    猜你喜欢
    • 2021-02-28
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 2021-10-31
    • 1970-01-01
    相关资源
    最近更新 更多