通过对多个列和行

时间:2017-06-13 09:40:44

标签: r data.table

我不确定标题应该是什么,也许其他用户可以编辑它。谢谢。

我有一个数据:

date    sum.A_1  sum.A_2  sum.A_3  sum.B_1  sum.B_2  sum.B_3
201101  245726   7951     81732    172      344      172
201102  1066407  34094    371868   793      1586     793
201103  1608750  51527    557677   1203     2406     1203  

我想创建 1个新行 2个新列
结果如下:

date    sum.A_1  sum.A_2  sum.A_3  sum.B_1  sum.B_2  sum.B_3   SUM.A    SUM.B
201101  245726   7951     81732    172      344      172       335409   688
201102  1066407  34094    371868   793      1586     793       1472369  3172
201103  1608750  51527    557677   1203     2406     1203      2217954  4812
TOTAL   2920883  93572    1011277  2168     4336     2168      4025732  8672

我想创建2个新列SUM.ASUM.B,然后创建1个新行TOTAL
SUM.A总结了sum.A_1 : sum.A_3; SUM.B总和为sum.B_1 : sum.B_3 TOTAL由每列汇总。

数据

data <- "date    sum.A_1  sum.A_2  sum.A_3  sum.B_1  sum.B_2  sum.B_3
1: 201101  245726   7951     81732    172      344      172
2: 201102  1066407  34094    371868   793      1586     793
3: 201103  1608750  51527    557677   1203     2406     1203  
"
data <- read.table(text = data, header = T)
data <- as.data.table(data)

有什么建议吗?

更新
我弄清楚每行的总和,但仍无法解决每列的总和 我浏览了StackOverFlow并看到了2个有用的资源 R: colSums when not all columns are numeric
How do I add a row to a data frame with totals?

所以,我试试我的数据:

 rownames(data) <- data$date
 addmargins(as.table(as.matrix(data[-1])), 1)
 # Error in FUN(newX[, i], ...) : invalid 'type' (character) of argument
 data["TOTAL", .SDcols = grep("sum.", names(data))] <- sapply(colSums(data), is.numeric)
 # Error in colSums(data) : 'x' must be numeric

是否有使用data.table方式的解决方案?

已解决

janitor::adorn_totals(data, "row")

0 个答案:

没有答案