나는 다음과 같은 데이터 테이블의 데이터 1 (더 라인과 더 유사하지만이 샘플) 한 : 합계 열 값은
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