2015-09-16 4 views
16

Использование dplyr, вы можете сделать что-то вроде этого:dplyr: как ссылаться на столбцы по индексу столбца, а не по имени столбца, используя mutate?

iris %>% head %>% mutate(sum=Sepal.Length + Sepal.Width) 
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species sum 
1   5.1   3.5   1.4   0.2 setosa 8.6 
2   4.9   3.0   1.4   0.2 setosa 7.9 
3   4.7   3.2   1.3   0.2 setosa 7.9 
4   4.6   3.1   1.5   0.2 setosa 7.7 
5   5.0   3.6   1.4   0.2 setosa 8.6 
6   5.4   3.9   1.7   0.4 setosa 9.3 

Но прежде, я ссылаться на столбцы по именам столбцов. Как я могу использовать 1 и 2, которые являются индексами столбцов для достижения того же результата?

Здесь у меня есть следующее, но я чувствую, что это не так элегантно.

iris %>% head %>% mutate(sum=apply(select(.,1,2),1,sum)) 
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species sum 
1   5.1   3.5   1.4   0.2 setosa 8.6 
2   4.9   3.0   1.4   0.2 setosa 7.9 
3   4.7   3.2   1.3   0.2 setosa 7.9 
4   4.6   3.1   1.5   0.2 setosa 7.7 
5   5.0   3.6   1.4   0.2 setosa 8.6 
6   5.4   3.9   1.7   0.4 setosa 9.3 

ответ

26

Вы можете попробовать:

iris %>% head %>% mutate(sum = .[[1]] + .[[2]]) 

    Sepal.Length Sepal.Width Petal.Length Petal.Width Species sum 
1   5.1   3.5   1.4   0.2 setosa 8.6 
2   4.9   3.0   1.4   0.2 setosa 7.9 
3   4.7   3.2   1.3   0.2 setosa 7.9 
4   4.6   3.1   1.5   0.2 setosa 7.7 
5   5.0   3.6   1.4   0.2 setosa 8.6 
6   5.4   3.9   1.7   0.4 setosa 9.3 
+5

Примечание это не будет хорошо сочетаются с 'group_by':.' Ирис%>% group_by (видов)%>% мутировать (сумма = [[1] ] +. [[2]]), тогда как 'iris%>% group_by (Species)%>% mutate (sum = Sepal.Length + Sepal.Width)' делает. – MrFlick

+1

@MrFlick - Может, мне что-то не хватает. Зачем группировать материю, когда вы вычисляете поровну? Вероятно, они могли бы сбросить 'ungroup()' там, затем перегруппироваться, если они выполняют другие операции. Я нашел это прежде. –

+4

@RichardScriven Это скорее предупреждение о том, что этот метод действительно обходит большую часть инфраструктуры dplyr, поэтому он может разорвать такие вещи, как группировка, которая в противном случае будет работать. Вы по сути пропускаете параметр 'data =' mutate. Вы правы, что это не имеет особого значения для мутанта 'mutate()', но рассмотрим: 'iris%>% group_by (Species)%>% summary (x = mean (. [[1]] +. [[2]])) 'Это нехороший« общий »метод для указания столбцов по индексу. – MrFlick

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