我有以下數據表DATA1(多行和多的變化,但,這是一個樣品):薩姆列值
item cat1 cat2 cat3 amounts
1: 1 99 9999 9990 100
2: 2 12 8199 9990 100
3: 3 12 8199 9990 100
4: 4 12 8199 9990 100
5: 5 12 8199 9990 100
6: 6 12 8199 9990 100
7: 7 12 8199 9990 100
8: 8 12 4129 9990 100
9: 9 12 8199 9990 100
10: 10 12 8199 9990 100
library(data.table)
data1 <- setDT(structure(list(item = 1:10, cat1 = c("99", "12", "12", "12",
"12", "12", "12", "12", "12", "12"), cat2 = c("9999", "8199",
"8199", "8199", "8199", "8199", "8199", "4129", "8199", "8199"
), cat3 = c("9990", "9990", "9990", "9990", "9990", "9990", "9990",
"9990", "9990", "9990"), amounts = c("100", "100", "100", "100",
"100", "100", "100", "100", "100", "100")), .Names = c("item",
"cat1", "cat2", "cat3", "amounts"), class = c("data.table", "data.frame"
), row.names = c(NA, -10L)))
最初我想獲得有關的一些信息符合cat1,cat2,cat3標準的行。所以我做了這樣的事情:
data1[, .( items = .N,
group1 = sum(grepl("^[1-8]{2}$", cat1)),
group2 = sum(grepl("^[1-8]9$", cat1)),
group3 = sum(grepl("^9[1-8]$", cat1)),
group4 = sum(cat1 == "99"))]
並將結果:
items group1 group2 group3 group4
1: 10 9 0 0 1
有很多包含在分析的其他標準,但這樣也只是一個樣本。我的要求發生了變化,現在對於指定的每個組我都需要總結金額。 所以我有兩個問題:
1)是否有數據表的方式來做到這一點求和以類似的方式對一個計算計數(所以基本想法是像sum(amounts)
其中grepl("^[1-8]{2}$", cat1)
)
2)有沒有這樣做的有效方式,我錯過了?我想不出有什麼好的方法可以讓我的結果除了爲每個我有的標準添加新的列到原始數據集,然後進行過濾總和。
我理想中的結果將是:
items group1 group2 group3 group4 total_amounts group1_amounts group2_amounts group3_amounts group4_amounts
1: 10 9 0 0 1 1000 900 0 0 100
非常感謝! – User2321