在两列数据帧R中按条件求和
我有这样的数据帧在两列数据帧R中按条件求和,r,dataframe,aggregate,R,Dataframe,Aggregate,我有这样的数据帧 date apps long 10/22/2013 23:51 A 2 10/22/2013 23:52 B 3 10/22/2013 23:52 C 1 10/23/2013 7:03 C 5 10/23/2013 7:13 A 1 10/23/2013 7:31 B 4 10/23/2013 7:31 A 5 10/23/2013 7:31 B 2 10/2
date apps long
10/22/2013 23:51 A 2
10/22/2013 23:52 B 3
10/22/2013 23:52 C 1
10/23/2013 7:03 C 5
10/23/2013 7:13 A 1
10/23/2013 7:31 B 4
10/23/2013 7:31 A 5
10/23/2013 7:31 B 2
10/24/2013 0:54 B 3
10/24/2013 1:16 C 2
10/24/2013 1:16 C 1
10/24/2013 3:27 A 2
10/24/2013 7:30 A 3
10/24/2013 7:30 A 1
我遇到的问题是:
我想计算A、B、C应用程序每天花费的时间。因此,输出将如下所示:
A 10/22/2013 2
A 10/23/2013 6
A 10/24/2013 6
etc...
我尝试了一些语法,但没有成功,谢谢你我很确定这是重复的,但我在前三次搜索中失败了,所以它是:
tapply( dat$long, list(dt = format( as.POSIXct(dat$date, "%d-%m-%Y %H:%M"),
"%d-%m-%Y"),
grp=dat$apps ),
sum)
首先,我假设您的data.frame名为
dd
。在这里,它是一个复制/粘贴的形式
dd <- structure(list(date = structure(c(1L, 2L, 2L, 3L, 4L, 5L, 5L,
5L, 6L, 7L, 7L, 8L, 9L, 9L), .Label = c("10/22/2013 23:51", "10/22/2013 23:52",
"10/23/2013 7:03", "10/23/2013 7:13", "10/23/2013 7:31", "10/24/2013 0:54",
"10/24/2013 1:16", "10/24/2013 3:27", "10/24/2013 7:30"), class = "factor"),
apps = structure(c(1L, 2L, 3L, 3L, 1L, 2L, 1L, 2L, 2L, 3L,
3L, 1L, 1L, 1L), .Label = c("A", "B", "C"), class = "factor"),
long = c(2L, 3L, 1L, 5L, 1L, 4L, 5L, 2L, 3L, 2L, 1L, 2L,
3L, 1L)), .Names = c("date", "apps", "long"), class = "data.frame", row.names = c(NA,
-14L))
这是回报
as.Date(date) apps long
1 2013-10-22 A 2
2 2013-10-23 A 6
3 2013-10-24 A 6
4 2013-10-22 B 3
5 2013-10-23 B 6
6 2013-10-24 B 3
7 2013-10-22 C 1
8 2013-10-23 C 5
9 2013-10-24 C 3
在Flick先生的
dd
library(dplyr)
dd%>%
group_by(apps, date=gsub("\\s+.*","",date))%>%
summarize(long=sum(long))
# apps date long
# 1 A 10/22/2013 2
# 2 A 10/23/2013 6
# 3 A 10/24/2013 6
# 4 B 10/22/2013 3
# 5 B 10/23/2013 6
# 6 B 10/24/2013 3
# 7 C 10/22/2013 1
# 8 C 10/23/2013 5
# 9 C 10/24/2013 3
@帕斯卡谢谢,这是工作,但我仍然有问题,因为日期的格式
10/22/2013 23:52
如何更改为10/22/2013
到此数据框中的所有列日期,很抱歉我在R方面非常新,感谢您的高级。您的日期列的class()
是什么?它是“POSIXct”还是“factor”还是别的什么?@MrFlick本专栏的类是factor,我尝试了这个sappy(apps1$time,as.Date(apps1$time,format='%m/%d/%Y'))
但是当我运行dd$Date时,我的姿势足以使我在你的计算机上运行的内容准确无误。如果你得到NA值,花些时间弄清楚你的数据和我的数据有什么不同。也许可以花点时间阅读一些关于如何改进问题以使其更容易回答的技巧。是的,确实有效,对不起,我搞错了。谢谢你的帮助
as.Date(date) apps long
1 2013-10-22 A 2
2 2013-10-23 A 6
3 2013-10-24 A 6
4 2013-10-22 B 3
5 2013-10-23 B 6
6 2013-10-24 B 3
7 2013-10-22 C 1
8 2013-10-23 C 5
9 2013-10-24 C 3
library(dplyr)
dd%>%
group_by(apps, date=gsub("\\s+.*","",date))%>%
summarize(long=sum(long))
# apps date long
# 1 A 10/22/2013 2
# 2 A 10/23/2013 6
# 3 A 10/24/2013 6
# 4 B 10/22/2013 3
# 5 B 10/23/2013 6
# 6 B 10/24/2013 3
# 7 C 10/22/2013 1
# 8 C 10/23/2013 5
# 9 C 10/24/2013 3