2016-10-21 9 views
1

条件と日の両方を考慮しながら、ある列の割合を計算しようとしています。最終結果は、パーセンテージ値とともに、1日あたりの条件ごとに1行ずつ表示されます。私の現在の進歩は下で見つけることができますが、私は最後のステップで立ち往生しています。どんな助けでも大歓迎です。2つの変数でパーセンテージを計算する

のデータのロード:

ID <-c(rep("A", 5), rep("B",6), rep("C",4)) 
Day <- c(1,1,1,2,2,1,1,1,2,2,2,1,1,1,2) 
Results1 <- c("x","z","z","z","x","z","x","z","z","z","x","x","z","z","x") 
Results2 <- c(1,0,0,1,1,1,2,1,1,1,1,1,1,0,1) 

x <- data.table(ID, Day, Results1) 
x 

計算グローバル割合:1日と条件ごとに計算上の

sum(x$Results1== "x")/(sum(x$Results1 == "x") + sum(x$Results1 == "z")) * 100 

が試み:

a <- as.data.table(x)[, lapply(.SD, sum(x$Results1== "x")/(sum(x$Results1 == "x") + sum(x$Results1 == "z")) * 100), by .(x$ID, x$Day)] 

答えて

4

data.table内$を使用しないでください、これはサブセット化しているグループではなく、total data.tableを呼び出します。

x[, .((sum(Results1 == "x")/.N) * 100), by = .(ID, Day)] 
    ID Day  V1 
1: A 1 33.33333 
2: A 2 50.00000 
3: B 1 33.33333 
4: B 2 33.33333 
5: C 1 33.33333 
6: C 2 100.00000 

複数の結果を持っている場合は、カラム:

x[, .(lapply(.SD, function(col) {(sum(col == "x")/.N)* 100})), by = .(ID, Day)] 
+0

はどうもありがとうございました!データフレームで同じコードを使用しようとしているのに奇妙なエラーが発生した場合は、データフレームでas.data.table(df)を呼び出すことを忘れないでください。 – WalterB

関連する問題