-1

我是 R 新手,我正在尝试做一些我认为很简单的事情,但事实证明并非如此。我有以下格式的 CSV 数据:

document_id, change_id, change_author, doc_author, date
aaaaaaa, a1, joe, jessie, 3/15/17
aaaaaaa, a2, jane, jessie, 1/2/17
bbbbbbb, a1, jane, jack, 4/5/17

我想产生类似以下的东西:

Author   17-01   17-02   17-03   17-04     # this is the header row
Joe         12       8      15       2     # Count for joe
Jane        17      15      22      10

期望的结果是作者在任何给定月份所做的注释计数,无论注释是针对哪个文档进行的。

我到处都遇到了新砖墙,包括只看到如何创建一个带有命名行而不是命名列的 data.frame。我可以获得作者列表和日期列表,但我似乎无法生成我想要的汇总。到目前为止,我的代码是:

case_stats <- read.table("~/Downloads/Annotations.csv", header = TRUE, sep = ",")
case_stats <- cbind(case_stats, Month = format(as.Date(case_stats$date_antn, "%m/%d/%y"), "%y-%m"))
months <- unique(subset(case_stats, select = c(Month)))
authors <- unique(subset(case_stats, select = c(author)))
count <- length(unlist(months))
df <- data.frame(num = rep(NA, count), txt=rep("", count), stringsAsFactors=FALSE, col.names = c(months))
4

1 回答 1

0

调用您的数据dd,我们可以使用该reshape2::dcast函数通过此聚合将其从长转换为宽。如果您的数据很大,则应将其设为 adata.tabledata.table::dcast改为使用。

dd$month = lubridate::floor_date(as.Date(dd$date, "%m/%d/%y"), unit = "month")
reshape2::dcast(dd, change_author ~ month, value.var = "month", fun.aggregate = length)
#   change_author 2017-01-01 2017-03-01 2017-04-01
# 1          jane          1          0          1
# 2           joe          0          1          0

使用此输入:

dd = read.table(text = "document_id, change_id, change_author, doc_author, date
aaaaaaa, a1, joe, jessie, 3/15/17
aaaaaaa, a2, jane, jessie, 1/2/17
bbbbbbb, a1, jane, jack, 4/5/17", sep = ",", header = T)
于 2018-06-20T20:26:28.310 回答