Câu hỏi của tôi bao gồm tổng hợp các giá trị trên nhiều cột của một khung dữ liệu và tạo cột mới tương ứng với tổng kết này bằng cách sử dụng dplyr
. Các mục dữ liệu trong các cột là nhị phân (0,1). Tôi đang nghĩ về một tương tự hàng khôn ngoan của hàm summarise_each
hoặc mutate_each
của dplyr
. Dưới đây là một ví dụ tối thiểu của khung dữ liệu:Tổng trên nhiều cột với dplyr
library(dplyr)
df=data.frame(
x1=c(1,0,0,NA,0,1,1,NA,0,1),
x2=c(1,1,NA,1,1,0,NA,NA,0,1),
x3=c(0,1,0,1,1,0,NA,NA,0,1),
x4=c(1,0,NA,1,0,0,NA,0,0,1),
x5=c(1,1,NA,1,1,1,NA,1,0,1))
> df
x1 x2 x3 x4 x5
1 1 1 0 1 1
2 0 1 1 0 1
3 0 NA 0 NA NA
4 NA 1 1 1 1
5 0 1 1 0 1
6 1 0 0 0 1
7 1 NA NA NA NA
8 NA NA NA 0 1
9 0 0 0 0 0
10 1 1 1 1 1
tôi có thể sử dụng một cái gì đó như:
df <- df %>% mutate(sumrow= x1 + x2 + x3 + x4 + x5)
nhưng điều này sẽ liên quan đến việc viết ra tên của mỗi cột. Tôi có 50 cột. Ngoài ra, tên cột thay đổi tại các lần lặp khác nhau của vòng lặp mà tôi muốn triển khai hoạt động này vì vậy tôi muốn thử tránh phải đưa ra bất kỳ tên cột nào.
Tôi làm cách nào hiệu quả nhất? Bất kỳ hỗ trợ nào sẽ được đánh giá cao.
Tại sao «dplyr'? Tại sao không chỉ đơn giản 'df $ sumrow <- rowSums (df, na.rm = TRUE)' từ cơ sở R? Hoặc '' 'df $ sumrow <- Reduce (' + ', df)' '' nếu bạn muốn sao chép chính xác điều bạn đã làm với 'dplyr'. –
Bạn có thể thực hiện cả hai với 'dplyr' cũng như trong' '' df%>% mutate (sumrow = Reduce ('+',.)) '' 'Hoặc' df%>% mutate (sumrow = rowSums (.)) ' –
Có, hàm R' rowSums' cơ bản hoạt động tốt. Tuy nhiên, hãy thử các đề xuất trong 'dplyr'; 'df%>% mutate (sumrow = rowSums (.))' và 'df%>% mutate (sumrow = Reduce (' + ',.))' tạo ra các lỗi. Tôi vừa nghĩ đến việc kết hợp các hoạt động trong một chuỗi dplyr cùng với các hoạt động khác trước đó và sau đó trong chuỗi .. @ DavidArenburg – amo