从忽略R

时间:2018-06-28 08:59:33

标签: r

我已将带有标题的表从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 :(得分: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))

答案 1 :(得分:0)

如果您使用空字符串而不是NA,请扩展@AshOfFire的答案:

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.gridna.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