0

我已将带有标题的表从 excel 导出到 R 表。但是,表格中的每一列都有不同的长度,例如:

在此处输入图像描述

我使用以下内容将表存储在 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()从表中获取所有组合而不调用每一列?

4

2 回答 2

2

假设您在读取文件时拥有此数据框。

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))

一个简单的解决方案是为每个变量选择非 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)])

编辑 使用@LAP 答案并在一个简单命令中概括所有列,您可以使用此指令。

expand.grid(apply(mydf, 2, na.omit))
于 2018-06-28T09:12:17.133 回答
0

要扩展@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.gridwith :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
于 2018-06-28T09:20:54.723 回答