如何解决我如何创建新变量,该变量将添加以其他变量集为条件的列的值? 提供示例
我有四个变量分别用于家庭成员的年龄,即age_01,age_02,age_03和age_04,还有四个变量用于其工作时间work_hr_01,work_hr_02,work_hr_03和work_hr_04。我想为16岁和17岁家庭成员的总工作时间创建一个新变量。我有以下数据:
id age_01 age_02 age_03 age_04 work_hr_01 work_hr_02 work_hr_03 work_hr_04
1 24 16 22 16 33 45 55 40
2 33 17 18 17 40 33 35 39
3 33 17 16 16 40 33 34 42
期望的结果,其中包含两个新变量work_hr_by_16和work_hr_by_17
ID age_01 age_02 age_03 age_04 work_hr_01 work_hr_02 work_hr_03 work_hr_04 work_hr_by_16 work_hr_by_17
1 24 16 22 16 33 45 55 40 85 na
2 33 17 18 17 40 33 35 39 na 72
3 33 17 16 16 40 33 34 42 76 33
解决方法
如果您以长格式使用数据来区分年龄和工作时间,那么管理数据会容易得多。然后,我们可以filter
并仅选择age
是16或17的那些行,sum
及其work_hr
并以宽格式返回数据。
library(dplyr)
library(tidyr)
df %>%
pivot_longer(cols = -id,names_to = c('.value','num'),names_pattern = '(.*)_(.*)') %>%
filter(age %in% 16:17) %>%
group_by(id,age) %>%
summarise(work_hr = sum(work_hr)) %>%
pivot_wider(names_from = age,values_from = work_hr,names_prefix = 'work_hr_by_') %>%
left_join(df,by = 'id')
# id work_hr_by_16 work_hr_by_17 age_01 age_02 age_03 age_04 ...
# <int> <int> <int> <int> <int> <int> <int> ...
#1 1 85 NA 24 16 22 16 ...
#2 2 NA 72 33 17 18 17 ...
#3 3 76 33 33 17 16 16 ...
数据
df <- structure(list(id = 1:3,age_01 = c(24L,33L,33L),age_02 = c(16L,17L,17L),age_03 = c(22L,18L,16L),age_04 = c(16L,16L
),work_hr_01 = c(33L,40L,40L),work_hr_02 = c(45L,33L
),work_hr_03 = c(55L,35L,34L),work_hr_04 = c(40L,39L,42L
)),class = "data.frame",row.names = c(NA,-3L))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。