【问题标题】:Counting the number of changes of a categorical variable during repeated measurements within a category统计类别内重复测量期间类别变量的变化次数
【发布时间】:2019-11-16 17:24:23
【问题描述】:

我正在处理一个关于全国迁移的数据集,其中包含以下列:

i   birth   gender  race    region  urban   wage    year  educ
1   58      2        3      1       1       4620    1979   12
1   58      2        3      1       1       4620    1980   12
1   58      2        3      2       1       4620    1981   12
1   58      2        3      2       1       4700    1982   12

.....

i   birth   gender  race    region  urban   wage    year  educ
45   65      2        3      3       1      NA       1979   10
45   65      2        3      3       1      NA       1980   10
45   65      2        3      4       2      11500    1981   10
45   65      2        3      1       1      11500    1982   10

i = 个人 ID。他们跟踪一大群人 25 年,记录“区域”(分类变量,1-4)、“城市”(虚拟)、“工资”和“教育”的变化。

如何计算每个受试者在观察期间(25 年期间)内“区域”或“城市”发生变化的总次数(例如:从区域 1 到区域 3 或从城市 0 到 1)?我的数据中也有一些 NA(应该忽略)

预期输出的简化版本:

i  changes in region
1   1
...
45  2

i  changes in urban
1   0
...
45  2

然后我想总结一下区域和城市的变化次数。

我遇到了这些答案:Count number of changes in categorical variables during repeated measurementsIdentify change in categorical data across datapoints in R,但我还是不明白。

这是 i=4 的部分数据。

i   birth gender    race    region  urban   wage    year    educ
4   62      2        3        1      1       NA     1979    9
4   62      2        3        NA     NA      NA     1980    9
4   62      2        3        4      1       0      1981    9
4   62      2        3        4      1       1086   1982    9
4   62      2        3        1      1       70     1983    9
4   62      2        3        1      1       0      1984    9
4   62      2        3        1      1       0      1985    9
4   62      2        3        1      1       7000   1986    9
4   62      2        3        1      1      17500   1987    9
4   62      2        3        1      1      21320   1988    9
4   62      2        3        1      1      21760   1989    9
4   62      2        3        1      1         0    1990    9
4   62      2        3        1      1         0    1991    9
4   62      2        3        1      1      30500   1992    9
4   62      2        3        1      1      33000   1993    9
4   62      2        3       NA     NA        NA    1994    9
4   62      2        3        4      1      35000   1996    9

这里,输出应该是:

i change_reg   change_urban
4  3            0

【问题讨论】:

  • 欢迎来到stackoverflow!您的问题不清楚,请根据How to make a great R reproducible example阅读并编辑您的问题,以便其他用户可以帮助您。另外,添加预期的输出。
  • 请具体说明您的预期输出。根据您的示例数据,不要提及“汇总统计信息”,而是提供这些汇总计数的确切值,以反映区域或城市的变化。您的示例越详细和解释性越好。
  • @Ben 添加了一些示例,希望对您有所帮助
  • 我看到 i=45 时,城市的变化是 1,虽然它看起来像 2 个变化(从 1 到 2,然后从 2 到 1)。您是否正在寻找区域和城市的独特值的数量,因为人以前在 1 的城市中?还是这是一个错误?
  • @Ben 哎呀,这是个错误。应该是 2。不寻找独特的变化,将编辑

标签: r count


【解决方案1】:

我希望这里有一些东西可以让你更接近你的需要。

首先你按i 分组。然后,您可以创建一个列,该列将为区域中的每个更改指示一个 1。这会将区域的当前值与之前的值进行比较(使用lag)。请注意,如果之前的值是 NA(查看给定 i 的第一个值时),它将被视为没有变化。

城市也采用相同的方法。然后,汇总每个i 的所有更改。我保留了这些临时变量,以便您检查是否获得了所需的结果。

编辑:如果您希望删除具有NA 的行,用于regionurban,您可以先添加drop_na

library(dplyr)
library(tidyr)

df_tot <- df %>%
  drop_na(region, urban) %>%
  group_by(i) %>%
  mutate(reg_change = ifelse(region == lag(region) | is.na(lag(region)), 0, 1),
         urban_change = ifelse(urban == lag(urban) | is.na(lag(urban)), 0, 1)) %>%
  summarize(tot_region = sum(reg_change),
            tot_urban = sum(urban_change))

# A tibble: 3 x 3
      i tot_region tot_urban
  <int>      <dbl>     <dbl>
1     1          1         0
2     4          3         0
3    45          2         2

编辑:之后,要获得tot_regiontot_urban 列的总计,您可以使用colSums。 (如上所述,将您之前的结果存储为df_tot。)

colSums(df_tot[-1])

tot_region  tot_urban 
         6          2 

【讨论】:

  • 谢谢,它大部分都有效,但 NA 仍然在搞乱我的输出 # A tibble: 12,686 x 3 i tot_region tot_urban 1 1 NA NA 2 2 0 0 3 3 1 0 4 4 NA NA 5 5 NA NA 6 6 2 2 7 7 NA NA 8 8 0 2 9 9 0 0 10 10 NA NA # … 还有 12,676 行 我必须弄清楚如何处理北美的
  • 您可以在查看更改之前使用drop_na 中的drop_na - 这可以满足您的需求吗?请参阅上面的编辑答案。
  • 成功了,谢谢! drop_na 非常有用 - 将牢记这一点以备将来使用。
  • 最后一个问题...如何计算“tot_region”和“tot_urban”的更改计数?
  • 这是一个总数吗?例如,在仅包括 1、4 和 45 中的 i 的示例中,tot_region_total 为 6,tot_urban_total 为 2?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-15
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 2016-03-22
相关资源
最近更新 更多