Создание всех возможных комбинаций из таблицы, игнорируя пробелы в R - PullRequest
0 голосов
/ 28 июня 2018

Я экспортировал таблицу с заголовками из таблицы Excel в таблицу R. Однако каждый столбец имеет разную длину в таблице, например:

enter image description here

Я использую следующее для хранения таблицы в объекте R:

table1 <- read.table(file = "clipboard", sep = "\t", fill= TRUE, header=TRUE)

Затем, чтобы получить комбинации, которые я использую:

comboTable <- expand.grid(table1$Laptop, table1$Hard_Disk, table1$RAM)

Проблема с описанной выше процедурой заключается в том, что я получаю все возможные комбинации, включая возможные с пустыми ячейками, импортированными из Excel.

Есть ли способ получить комбинацию, игнорируя эти ячейки пустым? также есть ли возможность expand.grid(), чтобы получить все комбинации из таблицы без вызова каждого отдельного столбца?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Чтобы расширить ответ @ AshOfFire, если вместо NA:

есть пустые строки
df <- data.frame(Laptop = c("Doll", "Landovo", "Ocer", "Toshibo", "UFO"),
                 Hard_Disk = c("100","500","1000", "", ""),
                 RAM = c("32","64","","",""), stringsAsFactors = FALSE)

используйте lapply, чтобы преобразовать их в NA:

df[] <- lapply(df, function(x){
  ifelse(x == "", NA, x)
})

, а затем используйте expand.grid с na.omit для соответствующих переменных:

expand.grid(df$Laptop, na.omit(df$Hard_Disk), na.omit(df$RAM), stringsAsFactors = FALSE)

      Var1 Var2 Var3
1     Doll  100   32
2  Landovo  100   32
3     Ocer  100   32
4  Toshibo  100   32
5      UFO  100   32
6     Doll  500   32
7  Landovo  500   32
8     Ocer  500   32
9  Toshibo  500   32
10     UFO  500   32
11    Doll 1000   32
12 Landovo 1000   32
13    Ocer 1000   32
14 Toshibo 1000   32
15     UFO 1000   32
16    Doll  100   64
17 Landovo  100   64
18    Ocer  100   64
19 Toshibo  100   64
20     UFO  100   64
21    Doll  500   64
22 Landovo  500   64
23    Ocer  500   64
24 Toshibo  500   64
25     UFO  500   64
26    Doll 1000   64
27 Landovo 1000   64
28    Ocer 1000   64
29 Toshibo 1000   64
30     UFO 1000   64
0 голосов
/ 28 июня 2018

Предполагая, что у вас есть этот фрейм данных при чтении вашего файла.

mydf <- data.frame(Laptop = c("Doll", "Landovo", "Ocer", "Toshibo", "UFO"), 
                   Hard_Disk = c(100,500,1000,NA, NA), RAM = c(32,64,NA,NA, NA))

Простое решение состояло бы в выборе ненатейных индексов для каждой вашей переменной, например:

expand.grid(Laptop = mydf$Laptop[!is.na(mydf$Laptop)], 
            Hard_Disk = mydf$Hard_Disk[!is.na(mydf$Hard_Disk)], 
            RAM = mydf$RAM[!is.na(mydf$RAM)])

EDIT Используя ответ @LAP и обобщая все столбцы в простой команде, вы можете использовать эту инструкцию.

expand.grid(apply(mydf, 2, na.omit))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...