2015-11-26 4 views
2

У меня есть dataframe с одним значением в строке, потенциально в одном из нескольких столбцов. Как я могу создать один столбец, который содержит номер столбца, в котором находится 1? Я хотел бы сделать это с помощью dplyr, но единственные методы, которые я могу придумать, включают в себя циклы, которые, похоже, очень не нравятся R.значения перекодировки в один столбец

df<-data.frame(
    a=c(1,0,0,0), 
    b=c(0,1,1,0), 
    c=c(0,0,0,1) 
) 

    a b c 
1 1 0 0 
2 0 1 0 
3 0 1 0 
4 0 0 1 

ЦЕЛЬ:

1 1 
2 2 
3 2 
4 3 

ответ

6

Там нет необходимости для dplyr здесь. Это то, что для max.col(). Так как все остальные значения в строке будут равны нулю, то max.col() предоставит нам номер столбца, где появится 1.

max.col(df) 
# [1] 1 2 2 3 

Если вам нужен столбец, то

data.frame(x = max.col(df)) 
# x 
# 1 1 
# 2 2 
# 3 2 
# 4 3 

Или cbind() или matrix() для матрицы.

+0

Удивительного спасибо. Когда я увидел ваш первый пост, я использовал: 'matrix (max.col (df), ncol = 1)' – Rilcon42

1

Мы могли бы также сделать

as.matrix(df) %*%seq_along(df) 
#  [,1] 
#[1,] 1 
#[2,] 2 
#[3,] 2 
#[4,] 3 
0
which(df==1, arr.ind=T) 
#  row col 
# [1,] 1 1 
# [2,] 2 2 
# [3,] 3 2 
# [4,] 4 3 
Смежные вопросы