Có cách nào khác với vòng lặp for - để tạo các biến mới trong một khung dữ liệu R, đây có phải là tất cả các tương tác 2 chiều giữa các biến hiện có không? tức là giả một dataframe với ba biến số V1, V2, V3, tôi muốn tạo ra các biến mới như sau:Tạo các biến tương tác trong các khung dữ liệu R
Inter.V1V2 (= V1 * V2)
Inter.V1V3 (= V1 * V3)
Inter.V2V3 (= V2 * V3)
Ví dụ sử dụng vòng lặp for:
x <- read.table(textConnection('
V1 V2 V3 V4
1 9 25 18
2 5 20 10
3 4 30 12
4 4 34 16'
), header=TRUE)
dim.init <- dim(x)[2]
for (i in 1: (dim.init - 1)) {
for (j in (i + 1) : (dim.init)) {
x[dim(x)[2] + 1] <- x[i] * x[j]
names(x)[dim(x)[2]] <- paste("Inter.V",i,"V",j,sep="")
}
}
+1 Không nhận thức được chức năng model.matrix. Rất hữu dụng! – Shane
Tuyệt vời! Bạn cũng có thể loại bỏ trường hợp không liên quan (trong trường hợp của chúng tôi) chặn mô hình.matrix (~ (V1 + V2 + V3 + V4)^2-1, x) –
đúng. hoặc cho toàn bộ trường hợp chung là .data.frame (model.matrix (~.^2-1, x)) –