【发布时间】:2018-06-26 08:57:12
【问题描述】:
几天前我打开了这个帖子:
Clustering rows by group based on column value
我们在其中得到了这个结果:
df <- data.frame(ID = c(1,1,1,1,1,1,1,1,1,1,1, 1, 1,1,1,1,1),
Obs1 = c(1,1,0,1,0,1,1,0,1,0,0,0,1,1,1,1,1),
Control = c(0,3,3,1,12,1,1,1,36,13,1,1,2,24,2,2,48),
ClusterObs1 = c(1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5))
与:
df <- df %>%
group_by(ID) %>%
mutate_at(vars(Obs1),
funs(ClusterObs1= with(rle(.), rep(cumsum(values == 1), lengths))))
现在我必须做一些修改:
如果 'Control' 的值大于 12 并且实际的 'Obs1' 值等于 1 并且之前的 'Obs1' 值,'DesiredResultClusterObs1' 值应该加上 +1
df <- data.frame(ID = c(1,1,1,1,1,1,1,1,1,1,1, 1, 1,1,1,1,1),
Obs1 = c(1,1,0,1,0,1,1,0,1,0,0,0,1,1,1,1,1),
Control = c(0,3,3,1,12,1,1,1,36,13,1,1,2,24,2,2,48),
ClusterObs1 = c(1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5),
DesiredResultClusterObs1 = c(1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 6, 6, 6, 7))
我考虑过添加 if_else 条件,但没有成功,有什么想法吗?
编辑:对于许多列会如何?
【问题讨论】:
-
我真的很喜欢你简洁的问题。一个非常聪明的评论:我很晚才知道这一点...理想情况下,当它们是 baseR 函数时,避免使用诸如“df”之类的对象名称-以免弄乱其他人的环境...
-
@Tjebo 将考虑新问题。谢谢
-
@Tjebo 这很有趣,我从来没有意识到
df实际上是一个函数。我很确定这是RSO 中最常见的数据名称。 -
@LAP 我知道 :) 我觉得自己像堂吉诃德 ;)
标签: r cluster-computing lag