【发布时间】:2017-04-07 18:09:40
【问题描述】:
我想为每个用户绘制点与时间的关系,但我不确定如何处理这些列以实现该结果。这是我的数据的样子:
> head(data, n=3)
points user time
25 1 02/22/2017
0 2 02/26/2017
15 3 02/27/2017
> dput(data)
structure(list(points = c(25, 0, 15), user = c(1, 2, 3), time = c("02/22/2017", "02/26/2017", "02/27/2017")), .Names = c("points", "user", "time"), row.names = c(NA, -3L), class = "data.frame")
仅供参考,有多个用户 ID(我认为最多 15 个)。但是我想做的是对每个用户的总积分求和(然后用户列中的数字对应于用户的 ID 号。然后随着时间的推移绘制这些值(具体按天)。
这是我用来生成每位用户总积分的代码
library(data.table)
ppu = setkey(setDT(df), user_id)[, list(points=sum(points)), by=list(user_id)]
结果如下:
但我想找出每位用户每天的总积分!非常感谢任何指导。
【问题讨论】:
-
如果您打算让任何人实际使用您的数据,请发布实际数据,而不是数据图片。 (与截屏、保存、上传、发布相比,复制/粘贴 R 控制台文本应该花费更少的精力。)
-
诀窍是在每行添加 4 个空格。尝试突出显示控制台文本,然后运行它(假设 win,类似的技术适用于 mac/linux):
writeLines(gsub("^", " ", readLines("clipboard")), "clipboard")(第二个字符串应该是四个空格)然后粘贴到您的问题中。这会强制 StackOverflow 对输出进行代码格式化(“逐字”)。 -
不过,我将支持@student 的评论:如果您使用
dput(data)(或dput(head(data)),如果很大),我们更容易消费,因为我们可以从字面上复制/粘贴并获取数据。否则,我们需要一点read.table魔法,并不总是“足够简单”。 -
另一边评论:我建议反对将变量命名为
data。如果你在没有创建变量的情况下运行脚本,而不是有用的错误消息 (Error: object 'x' not found),你会得到一些更模糊的东西 (Error in data$x : object of type 'closure' is not subsettable,这实际上意味着我试图将 function nameddata()子集化) . -
@r2evans 突出显示 SO 文本输入框中的文本,然后键入 Ctrl-K。
标签: r time data.table