(変なタイトルで申し訳ありませんが、これを短くする方法が思いつきませんでした)
前回の質問で問題を単純化しすぎたので、今回は実際の問題を示します。
提供されたデータフレームには、列「usr」、「usrMsgCnt」、および「isRefound」が含まれています。usr は名前、usrMsgCnt は数値、isRefound はバイナリです。
次のように値が計算される新しい列が追加されます。
usrMsgCnt/ usr がこの行の usr と等しく、isRefound が 1 に等しい行の数
サンプル データの最初の行の場合、新しい値は次のようになります。
長さによって 5 が生成される 9 / 5 (data$usr[data$usr=="Jan.Schrader" & data$isRefound==1])
これをループすることは、元のデータセットのサイズを考慮するとオプションではありません
これは、データの小さなチャンクの出力です
structure(list(usr = structure(c(21L, 21L, 21L, 21L, 6L, 5L,
6L, 6L, 6L, 21L, 20L, 21L, 6L, 20L, 21L, 21L, 21L, 6L, 6L, 6L
), .Label = c("alsmith", "Amanda.Coles", "Andrew.Coles", "babsimieth",
"Bernd.Ludwig", "Bernhard.Schiemann", "bfueck", "Bram.Ridder",
"brian.tripney", "carlosgardeazabal", "christine.elsweiler",
"cmfinner", "daniel.goncalves", "david", "de56", "eko.ma", "freundlu",
"gmcphail", "ian.ferguson", "Ian.Ruthven", "Jan.Schrader", "jearmour",
"jyang", "Laura.Schnall", "Marc.Roper", "marek.maleika", "Martin.Hacker",
"martin.scholz", "maziminke", "mclanger", "Michael.Cashmore",
"morgan.harvey", "mrussell", "msherrif", "murray.wood", "Nadine.Mahrholz",
"noam.ascher", "pburns", "Peter.Gregory", "raina", "robertnm",
"ronald.teijeira", "ronaldtf", "sbenus", "starmstr", "steve.neely",
"Sven.Friedemann", "tinchen"), class = "factor"), usrMsgCnt = c(9L,
9L, 9L, 9L, 5L, 0L, 5L, 5L, 5L, 9L, 0L, 9L, 5L, 0L, 9L, 9L, 9L,
37L, 37L, 37L), isRefound = c(0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L,
1L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 0L)), .Names = c("usr",
"usrMsgCnt", "isRefound"), row.names = c(NA, 20L), class = "data.frame")