让我们假设我们获得以下数据:
array_view
基本上我们计算每个夸克和每个字母对应的观察数量,使用库library(data.table)
letters <- sample (LETTERS[1:6], 100, replace = TRUE)
quarks <- sample(c("up", "down", "charme", "strange", "top", "bottom"),
100, replace = TRUE)
measures<- sample(seq(1:6), 100, replace = TRUE)
df <- data.frame(letters, quarks, measures)
df <- data.table(df)
df <- df[,.(count = sum(measures)), by = list(letters, quarks)]
df
letters quarks count
---------------------------
1: A bottom 13
2: A charme 3
3: A down 14
4: A strange 8
5: A top 11
6: A up 14
7: B bottom 8
8: B charme 12
9: B down 3
提供的[.,]
函数进行分组。
问题我想在此附上一个新列,显示每个字母的度量总数,以便将每个夸克标准化为具有相同字母的数量。特别地,这可以通过以下方式单独获得:
data.table
通过这种方式,每个单夸克的每个计数都可以被划分并标准化为我们与同一个字母相关的总夸克数。有没有办法实现这一点仍然使用df[,.(count = sum(measures)), by = letters]
letters count
1: F 54
2: E 65
3: B 71
4: D 36
5: C 82
6: A 45
?
答案 0 :(得分:3)
您可以通过链接一个新的摘要来实现这一点,在该摘要中,您只按getDepotInfo : function (depotCode) {
var deferred = $q.defer();
var oneDepInfo = {};
$http.get("data/depotList.json").success(function (data) {
some code...
}).then(function(){
$http.jsonp("http://urlhere").success(function (response) {
additional code...
deferred.resolve(oneDepInfo);
})
});
return deferred.promise;
}
分组到第一个摘要,如下所示:
letters
这给出了:
dfnew <- df[,.(count = sum(measures)), by = list(letters, quarks)
][, lettercount := sum(count) , by = letters]
如果你想要一个比率(比如答案中显示的@Arun)而不是字母总和,你可以用> dfnew
letters quarks count lettercount
1: A strange 16 30
2: A down 8 30
3: A top 5 30
4: A charme 1 30
5: B strange 13 43
6: B bottom 9 43
7: B top 14 43
8: B charme 6 43
9: B down 1 43
10: C charme 24 73
11: C up 7 73
12: C down 11 73
13: C strange 18 73
14: C top 3 73
15: C bottom 10 73
16: D down 8 41
17: D charme 3 41
18: D bottom 7 41
19: D up 10 41
20: D strange 4 41
21: D top 9 41
22: E charme 12 77
23: E up 8 77
24: E top 8 77
25: E strange 21 77
26: E bottom 13 77
27: E down 15 77
28: F bottom 14 45
29: F down 11 45
30: F up 10 45
31: F strange 8 45
32: F charme 2 45
替换lettercount := sum(count)
。
使用过的数据:
ratio := count/sum(count)
答案 1 :(得分:2)
另一种方法是使用.SD
组在每个组中,如下所示:
require(data.table)
ans = df[, .(ratio=.SD[, .(tmp=sum(measures)), by=quarks]$tmp/sum(measures)), by=letters]
head(ans)
# letters ratio
# 1: C 0.20588235
# 2: C 0.13235294
# 3: C 0.35294118
# 4: C 0.04411765
我仍然更喜欢@Jaap显示的答案,除了我们可以直接获得比率而不是创建 lettercount 列。