r - 如何引用满足某些条件的另一个值,然后可以在计算中使用
问题描述
我有两个数据框:
测试
Group.1 x
1 25.5
2 51
3 51.5
4 50
5 51.5
6 60
...
53 35.5
日历
Week Hours HourSpent
1 8.5
1 8.5
1 0
2 8.5
2 8.5
2 8.5
2 8.5
2 8.5
2 6.5
2 8.5
3 7.0
3 7.0
3 8.2
...
我要做的是通过执行以下计算来填充日历 df 中的“HourSpent”列:(('Hours' / 'HourSpent') * 0.79)
我希望能够遍历日历 df 中的每一行,并将该行的“小时”值与匹配的“小时”值相除。'HoursSpent' 值可以从'Test' df 中确定......所以如果日历 df 中的 'Week' 列中的值与 'Test' df 的 'Group.1' 列中的任何值匹配,那么我想要'Test' df 的 'x' 列中的相应值是 'HourSpent' 值。
例如
日历 df 中的第 1 行将是8.5 / 25.5 * 0.79
......这将适用于前 3 行,因为周数为 1。然后当我们到达第 4 行时,计算将变为8.5/ 51 * 0.79
等等......等等
所需的输出 - 日历 df
Week Hours HourSpent
1 8.5 0.2633
1 8.5 0.2633
1 0 0
2 8.5 0.1317
2 8.5 0.1317
2 8.5 0.1317
2 8.5 0.1317
2 8.5 0.1317
2 6.5 0.1007
2 8.5 0.1317
3 7.0 0.1074
...
代码尝试
for (i in 1:nrow(Calendar)){
Calendar$'HourSpent' <- ifelse(Calendar$Week == Test$Group.1,
(Calendar$Hours/Test$x)*0.79,
0)
}
问题是这似乎只适用于一行,然后其他一切都是 0......这个问题有更好的解决方案吗?
非常感谢
解决方案
Test <- data.frame(`Group.1` = c(1, 2, 3, 4), x = c(25.5, 51, 51.5, 50))
Calendar <- data.frame(Week = c(1, 1, 1, 2, 2, 2, 3, 3, 3), Hours = c(8.5, 8.5, 0, 8.5, 8.5, 8.5, 8.5, 8.5, 8.5))
Calendar <- dplyr::inner_join(Calendar, Test, by = c("Week" = "Group.1")) %>%
dplyr::mutate(Hours_spent = (Hours/x)*0.79)
输出
日历
Week Hours x Hours_spent
1 1 8.5 25.5 0.2633333
2 1 8.5 25.5 0.2633333
3 1 0.0 25.5 0.0000000
4 2 8.5 51.0 0.1316667
5 2 8.5 51.0 0.1316667
6 2 8.5 51.0 0.1316667
7 3 8.5 51.5 0.1303883
8 3 8.5 51.5 0.1303883
9 3 8.5 51.5 0.1303883
推荐阅读
- angular - Angular 应用程序未在 Safari 上加载,但可在 chrome 中使用
- python - Python:“浮动”对象不可下标
- oracle - 如何转义字符串中的单引号?
- python-3.x - 如何从不和谐服务器获取所有用户?
- postgresql - 在选定的时间间隔来自 PostgreSQL 数据库的数据
- python - 代码未执行,但也未显示任何错误
- eclipse-rcptt - 在 RCPTT 中使用数据绑定时,单击单选按钮不会更新布局
- python - IOError:[Errno 13] 权限被拒绝 Pandas
- c++ - MSB6006:“CL.exe”在使用 openMP 时以代码 2 退出
- sql-server - 将单行拆分为多行 - SQL Server Management Studio 2018