计数指定r中列的值

时间:2016-06-30 15:41:53

标签: r

我有一张看起来像这样的表:

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

2 个答案:

答案 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