我有一张看起来像这样的表:
v1 v2 v3
pos neg pos
pos pos pos
neg neg neg
我想创建另一个在其他三列之间获胜的专栏
v1 v2 v3 v4
pos neg pos pos
pos pos pos pos
neg neg neg neg
答案 0 :(得分:4)
由于“胜利者”意味着占多数,以下内容将起作用:
df$v4 <- ifelse(rowMeans(df == "neg") > 0.5, "neg", "pos")
df$v4
[1] "pos" "pos" "neg"
这使用rowMeans
来计算每行中“neg”的元素比例。这个结果被送到ifelse
,如果比例连续大于0.5,则返回“neg”,否则返回“pos”。
请注意,列必须是字符。这就是我使用下面as.is = TRUE
参数的原因。
数据强>
df <- read.table(header = TRUE, text = "v1 v2 v3
pos neg pos
pos pos pos
neg neg neg", as.is = TRUE)
答案 1 :(得分:3)
另一种可能性:
mydf$v4 <- apply(mydf, 1, function(x) names(which.max(table(x))))
给出:
> mydf
v1 v2 v3 v4
1 pos neg pos pos
2 pos pos pos pos
3 neg neg neg neg