我一直在研究我的问题的解决方案,我认为它在某个地方很大。我需要把我的数据框拆分为船名,每次活动改变时加0.1到net#然后合并数据集。我的数据框看起来像这样。
Boat Net # Activity
Ray F 40 Lift
Dawn 67 Lift
Ray F 40 Set
Dawn 67 Set
Ray F 40 Lift
Ray F 40 Set
Ray F 40 Lift
Dawn 67 Lift
应用函数后,我需要框架看起来像这样。每次活动=设置时,基本上都会在网上添加0.1,但船只相互独立。
Boat Net # Activity
Ray F 40.0 Lift
Dawn 67.0 Lift
Ray F 40.1 Set
Dawn 67.1 Set
Ray F 40.1 Lift
Ray F 40.2 Set
Ray F 40.2 Lift
Dawn 67.1 Lift
我一直在使用此功能为活动中的每次更改添加0.1到net#,并且它工作得非常好,但没有考虑船名。
df$`Net #` <- df$`Net #` + seq(0, 1, by = 0.1)[with(df, cumsum(c(TRUE, Activity[-1]!= Activity[-length(Activity)])))] + 1
最初我尝试使用Split,然后应用该功能,但没有做任何事情,所以我切换到了daply。我试过这个并得到以下错误:
daply(df, df$Boat, .fun = df$`Net #` + seq(0, 1, by = 0.1)[with(df, cumsum(c(TRUE, Activity[-1]!= Activity[-length(Activity)])))] + 1)
Error in parse(text = x) : <text>:1:6: unexpected symbol
1: Dawn Marie
^
我认为我走的是正确的道路,但任何帮助都会很棒。
答案 0 :(得分:0)
使用dplyr
包和%>%
运算符:
df <- df %>% group_by(Boat) %>% mutate(Net = Net + cumsum(Activity == "Set") * 0.1) %>% ungroup
我们有答案:
Boat Net Activity
1 Ray F 40.0 Lift
2 Dawn 67.0 Lift
3 Ray F 40.1 Set
4 Dawn 67.1 Set
5 Ray F 40.1 Lift
6 Ray F 40.2 Set
7 Ray F 40.2 Lift
8 Dawn 67.1 Lift
相同的代码,但如果您愿意,则不使用%>%
:
df <- ungroup(mutate(group_by(df, Boat), Net = Net + cumsum(Activity == "Set") * 0.1))