2016-06-30 3 views
1

У меня есть таблица, которая выглядит примерно так:Counting указать значение по столбцам в г

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

ли это символьные векторы, или реальные цифры? – lmo

+0

символьные векторы –

+0

Что означает «победитель»? большинство? – lmo

ответ

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 
4

As " победитель»означает, что большинство, следующие будут работать:

df$v4 <- ifelse(rowMeans(df == "neg") > 0.5, "neg", "pos") 

df$v4 
[1] "pos" "pos" "neg" 

Это использует rowMeans для вычислить долю элементов в каждой строке, которые являются «минус». Этот результат отправляется в 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) 
+0

Это не такое обобщенное решение, хотя вы предполагаете: 1: вы знаете все возможные значения. 2: в каждой строке возможны только 2 значения. –

+0

Не имел в виду ничего общего с обобщаемостью. – lmo

Смежные вопросы