【发布时间】:2026-02-05 01:05:01
【问题描述】:
我有两个数据框:
测试
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 中的每一行,并将该行的 'Hours' 值与匹配的 'HourSpent' 值相除。 '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...有没有更好的解决方案来解决这个问题?
非常感谢
【问题讨论】:
标签: r dataframe if-statement match