我已将带有标题的表从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()
从表中获取所有组合而无需调用每一列吗?
答案 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.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