r - 统计类别内重复测量期间类别变量的变化次数
问题描述
我正在处理一个关于全国迁移的数据集,其中包含以下列:
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 = 个人身份。他们跟踪一大群人 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 repeat measurement and identify 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
解决方案
这是我希望能让你更接近你需要的东西。
首先你分组i
。然后,您可以创建一个列,该列将为区域中的每个更改指示一个 1。这会将区域的当前值与之前的值进行比较(使用lag
)。请注意,如果先前的值是NA
(在查看给定的第一个值时i
),它将被视为没有变化。
城市也采用同样的方法。然后,汇总每个i
. 我保留了这些临时变量,因此您可以检查是否获得了所需的结果。
编辑:如果您希望删除具有NA
for 的行,region
或者urban
您可以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_region
:之后,要获得和列的总计tot_urban
,您可以使用colSums
. df_tot
(如上所述存储您之前的结果。)
colSums(df_tot[-1])
tot_region tot_urban
6 2
推荐阅读
- haskell - Traversable[]和Applicative Maybe在镜头库中的使用效果
- google-kubernetes-engine - 是否可以在 GKE 中为 Filestore 设置 GID/UID?
- c++ - 如果我将 glUniform1f 调用放在渲染循环之前,则不会存储统一值
- powerbi - power bi报告中如何实现前两列或前三列的冻结
- c# - 使用 FileUpload 回发后保留所选文件
- python - habitat-api 快速启动无法正常运行 - qt.qpa.plugin: 在“”中找不到 Qt 平台插件“cocoa”
- java - 对于使用房间数据库的应用程序,概念是在后台运行的数据库交互,如何确保查询在继续之前完成
- javascript - pdfMake如何像属性布局一样在表的标题上设置行:headerLineOnly 有它,但使用 hLineWidth 作为函数
- c# - 通过 httpmodule 为自定义文件夹添加客户端缓存
- sql - 在 oracle 记录的响应中粘贴一个额外的字符