2017-02-01 2 views
1

У меня есть кадр данных, как показано ниже. Я хочу, чтобы подсчитать вхождения 1 в каждой строке и вставить новый столбец с этой информацией:Мутате с числом вхождений в кадре данных - R

df1 

    Cluster a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 
1  C1 0 1 1 1 0 1 1 1 1 1 1 
2  C2 0 1 1 1 0 1 1 1 1 1 1 
3  C3 0 1 0 0 0 0 1 0 0 0 0 
4  C4 0 1 1 1 0 1 1 1 1 1 1 
5  C5 0 1 1 1 0 1 1 1 1 1 1 

Я хочу результаты быть следующим:

df1 

    Cluster a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 X 
1  C1 0 1 1 1 0 1 1 1 1 1 1 9 
2  C2 0 1 1 1 0 1 1 1 1 1 1 9 
3  C3 0 1 0 0 0 0 1 0 0 0 0 2 
4  C4 0 1 1 1 0 1 1 1 1 1 1 9 
5  C5 0 1 1 1 0 1 1 1 1 1 1 9 

Я предпочитаю использовать mutate функции в dplyr

+1

В базовой R 'ф.р. $ X <- rowSums (df1 [-1])' будет работать. -1 удаляет первый столбец из расчета. – lmo

+0

'@ lmo' ваше предложение работает для данного примера, но ответ, заданный' @Jake Kaupp', более общий, так как мой реальный кадр данных состоит из нескольких столбцов с некоторыми числовыми значениями, а также 'NA's – Anna

+0

звучит хорошо, @Анна. Как вопрос, спрашивающий, сила галочки принадлежит вам. Обратите внимание, что 'rowSums' имеет аргумент na.rm для удаления значений NA, поэтому эта часть не является проблемой. – lmo

ответ

5

Мне нравится использовать select_if внутри rowSums обобщать цепь.

Edit: Если вам необходимо обратиться значения NA, используйте параметр na.rm в rowSums

df1 %>% 
    mutate(X = rowSums(select_if(., is.numeric) == 1, na.rm = TRUE)) 
+0

'@ Jake Kaupp'' Psidom' В моем реальном фрейме данных у меня также есть несколько значений NA, мне нужно избегать их при подсчете 1 сек. В противном случае мои результаты оказались в значении 'NA' – Anna

+0

, и обновили ответ, чтобы использовать настройку' na.rm' –

1

Может не быть общим. Но это должно работать для данного случая:

df1 %>% mutate(X = rowSums(.[-1] == 1)) 

# Cluster a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 X 
#1  C1 0 1 1 1 0 1 1 1 1 1 1 9 
#2  C2 0 1 1 1 0 1 1 1 1 1 1 9 
#3  C3 0 1 0 0 0 0 1 0 0 0 0 2 
#4  C4 0 1 1 1 0 1 1 1 1 1 1 9 
#5  C5 0 1 1 1 0 1 1 1 1 1 1 9 

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

  • Нет связанных вопросов^_^