2015-09-16 18 views
16

Sử dụng dplyr, bạn có thể làm một cái gì đó như thế này:dplyr: cách tham chiếu cột theo chỉ mục cột thay vì tên cột bằng cách sử dụng biến thể?

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 

Nhưng ở trên, tôi tham khảo các cột bằng tên cột của họ. Làm cách nào tôi có thể sử dụng 12, các chỉ số cột nào để đạt được cùng một kết quả?

Ở đây tôi có những điều sau đây, nhưng tôi cảm thấy nó không thanh lịch.

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 

Trả lời

26

Bạn có thể thử:

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

Chú giải này sẽ không kết hợp tốt với 'group_by':. 'Iris%>% group_by (loài)%>% đột biến (tổng = [[1] ] +. [[2]]) 'trong khi' iris%>% group_by (Loài)%>% biến đổi (sum = Sepal.Length + Sepal.Width) 'hiện. – MrFlick

+1

@MrFlick - Có thể tôi đang thiếu thứ gì đó. Tại sao nhóm lại vấn đề khi bạn tính toán hàng khôn ngoan? Họ có lẽ có thể ném một 'ungroup()' vào đó sau đó tập hợp lại nếu họ đang thực hiện các hoạt động khác. Tôi đã thấy rằng cần thiết trước đây. –

+4

@RichardScriven Đó là một cảnh báo rằng phương pháp này thực sự là bằng cách vượt qua phần lớn cơ sở hạ tầng dplyr để nó có thể phá vỡ những thứ như nhóm mà nếu không sẽ làm việc. Về cơ bản, bạn bỏ qua tham số 'data =' của biến đổi. Bạn nói đúng rằng điều này không thực sự quan trọng đối với 'mutate()' hàng, nhưng hãy xem xét: 'iris%>% group_by (Loài)%>% summary (x = mean (. [[1]] +. [[2]])) 'Đây không phải là một phương pháp" chung "tốt để chỉ định các cột theo chỉ số. – MrFlick

Các vấn đề liên quan