我试图在大数据框中按行计算二进制字符结果:
V1 V2 V3 V4 V5
Loss Loss Loss Loss Loss
Loss Loss Win Win Loss
Loss Loss Loss Loss Loss
我需要知道的是按行输赢的频率。这只是一个简短的例子(大型模拟输出的片段),但对于第1行,在五次模拟中,我有五次损失,第二行三次丢失,两次获胜等。
我希望生成一个单独的表来显示按行获胜/失败的频率,或者,如果这不起作用,则添加两个新列:一个提供“Win”和“Loss”的数量每一行。
每一行都是不同的情况,每一列都是该案例的复制品。这显示为具有两个级别“损失”“赢”的因素的数据框。
答案 0 :(得分:8)
这是一个快速矢量化解决方案(假设您的数据集名为df
)
Loss <- rowSums(df == "Loss") # Count the "Loss" per row
cbind(Loss, Wins = ncol(df) - Loss) # Subscribe these from the columns numbers and combine
# Loss Wins
# [1,] 5 0
# [2,] 3 2
# [3,] 5 0
答案 1 :(得分:1)
基础R
的另一种选择:
stats = function(u){
win = sum(u=="Win")
data.frame(Win=win, Loss=length(u)-win)
}
Reduce(rbind, apply(df, 1, stats))
# Win Loss
#1 0 5
#2 2 3
#3 0 5
甚至在一行中更好但非矢量化:
t(apply(df, 1, function(u) table(factor(u, levels=c("Win","Loss")))))
# Win Loss
#[1,] 0 5
#[2,] 2 3
#[3,] 0 5