2015-12-17 7 views
0

У меня есть data.frame со следующей структурой:combn dataframe R 1 переменной только

x1 x2 x3 x4 x5 x6 
y n y n n y 
n n y n n y 
y y y y y n 

Хочу сделать комбинации combn(), но с использованием только лишь 1 из переменной, я имею в виду , gettingthis результат:

x1 x2 
x1 x3 
x1 x4 
x1 x5 
x1 x6 

Вместо: (слишком много varibales, что мне не нужно, и я хочу, чтобы выбрать х [я])

x1 x2 
... 
x2 x1 
x2 x2 
... 
x6 x5 

Спасибо

+0

Может быть 'reshape2 :: плавятся (your_data, id.vars = "x1")'? Я немного смущен тем, что вы хотите совершить с вашими значениями 'y' и' n' – Gregor

+1

Или, может быть, просто 'cbind (names (your_df) [1], names (your_df) [- 1])'? – Gregor

+0

Theyre просто пример того, что внутри каждого x [i] –

ответ

1

Используя эти данные

your_data = structure(list(x1 = structure(c(2L, 1L, 2L), .Label = c("n", 
"y"), class = "factor"), x2 = structure(c(1L, 1L, 2L), .Label = c("n", 
"y"), class = "factor"), x3 = structure(c(1L, 1L, 1L), .Label = "y", class = "factor"), 
    x4 = structure(c(1L, 1L, 2L), .Label = c("n", "y"), class = "factor"), 
    x5 = structure(c(1L, 1L, 2L), .Label = c("n", "y"), class = "factor"), 
    x6 = structure(c(2L, 2L, 1L), .Label = c("n", "y"), class = "factor")), .Names = c("x1", 
"x2", "x3", "x4", "x5", "x6"), class = "data.frame", row.names = c(NA, 
-3L)) 

Это согласует выход вы просите:

cbind(names(your_data)[1], names(your_data)[-1]) 
#  [,1] [,2] 
# [1,] "x1" "x2" 
# [2,] "x1" "x3" 
# [3,] "x1" "x4" 
# [4,] "x1" "x5" 
# [5,] "x1" "x6" 

Это матрица, но вы можете легко конвертировать в кадр данных с as.data.frame. Вы также можете его функционировать на основе номера столбца, который вы хотите в первой позиции.

single_combn = function(vec, pos) { 
    cbind(vec[pos], vec[-pos]) 
} 

Используйте пример:

single_combn(names(your_data), 1) 
#  [,1] [,2] 
# [1,] "x1" "x2" 
# [2,] "x1" "x3" 
# [3,] "x1" "x4" 
# [4,] "x1" "x5" 
# [5,] "x1" "x6" 

single_combn(names(your_data), 3) 
#  [,1] [,2] 
# [1,] "x3" "x1" 
# [2,] "x3" "x2" 
# [3,] "x3" "x4" 
# [4,] "x3" "x5" 
# [5,] "x3" "x6"