Tôi khá mới đối với R và đây là lần đầu tiên tôi dám đặt câu hỏi tại đây.R tổng các hàng cho các nhóm cột khác nhau bắt đầu bằng chuỗi tương tự
Tôi đang làm việc với tập dữ liệu có thang tỷ lệ và tôi muốn xếp hàng trên các nhóm cột khác nhau chia sẻ các chuỗi đầu tiên trong tên của chúng.
Dưới đây tôi xây dựng một khung dữ liệu chỉ có 2 hàng để minh họa cách tiếp cận mà tôi đã theo dõi, mặc dù tôi muốn nhận được phản hồi về cách tôi có thể viết một cách hiệu quả hơn để thực hiện nó.
df <- as.data.frame(rbind(rep(sample(1:5),4),rep(sample(1:5),4)))
var.names <- c("emp_1","emp_2","emp_3","emp_4","sat_1","sat_2"
,"sat_3","res_1","res_2","res_3","res_4","com_1",
"com_2","com_3","com_4","com_5","cap_1","cap_2",
"cap_3","cap_4")
names(df) <- var.names
Vì vậy, những gì tôi đã làm, là để sử dụng chức năng grep để có thể tổng hợp các hàng của các biến đã xác định rằng bắt đầu với chuỗi nhất định và lưu trữ chúng trong một biến mới. Nhưng tôi phải viết một dòng mã mới cho mỗi biến.
df$emp_t <- rowSums(df[, grep("\\bemp.", names(df))])
df$sat_t <- rowSums(df[, grep("\\bsat.", names(df))])
df$res_t <- rowSums(df[, grep("\\bres.", names(df))])
df$com_t <- rowSums(df[, grep("\\bcom.", names(df))])
df$cap_t <- rowSums(df[, grep("\\bcap.", names(df))])
Nhưng có nhiều biến hơn trong tập dữ liệu và tôi muốn biết liệu có cách nào để thực hiện điều này chỉ với một dòng mã hay không. Ví dụ, một số cách để nhóm các biến bắt đầu bằng các chuỗi giống nhau và sau đó áp dụng hàm hàng.
Cảm ơn trước!
Vâng, nếu đó là thao tác bạn cần thực hiện thường xuyên, có vẻ như dữ liệu của bạn có hình dạng sai. Sẽ dễ dàng hơn khi làm việc với dữ liệu ở định dạng "dài" thay vì định dạng "rộng" mà bạn hiện có. Có rất nhiều câu hỏi khác trên đó về định hình lại nếu đó là điều bạn muốn làm. – MrFlick