这个问题在这里已有答案:
我有以下数据集,我试图找到每台机器处于活动状态并基于SwitchedOnDate处于睡眠模式的天数 .
MachineID InstalledDate SwitchedOnDate Status
1 2010-02-18 2010-02-19 SleepMode
1 2010-02-18 2010-02-20 Active
1 2010-02-18 2010-02-21 SleepMode
1 2010-02-18 2010-02-22 Active
2 2010-02-20 2010-02-21 Active
2 2010-02-20 2010-02-22 SleepMode
3 2010-02-10 2010-02-18 SleepMode
4 2010-03-10 2010-03-15 Active
所以我的输出应该是这样的,
MachineID SleepModeDays ActiveDays
1 2 2
2 1 1
3 1 0
4 0 1
2 回答
您可以使用
count
对传递的最后一个变量的每个级别的出现进行分组和计数,然后使用spread
将数据重新排列为宽格式:基础R替代方案:
或者是非常直接的路线,
注意这些方法做了一些假设,例如,您不能多次出现
MachineID
,SwitchedOnDate
和Status
的相同组合 . 如果您的数据变得更复杂,请考虑到这一点 .使用data.table进行聚合和dcast功能,这是另一个解决方案: