根据多个条件将函数写入df子集

时间:2019-04-04 07:56:27

标签: r function conditional subset

这是我的数据示例:原始数据有20个列和1350行。

 a <- c("blue", "red", "green", "blue","cyan")
 b <- c("red","red","green","blue", "orange")
 data <- data.frame(a,b)

以下代码是运行良好的代码。在这段代码中,我的目的是 1.基于以下条件的子集df 2.删除未使用的级别 3.然后结果将以2 x 2的尺寸出现在表中

 blue.red <- subset(data, col1 %in% c("blue", "red") & 
               col2 %in% c("blue", "red"))
 rem <- droplevels(blue.red)
 table(rem$col1, rem.col2)

在这里,我试图编写一个函数来实现与上述代码相同的目的。

 sub_fun <- function(data, i, j...){
   subs <-subset(data, col1 %in% c("i", "j") &
             col2 %in% c("i", "j"))
   rem <- droplevels(subs)
   return(table(rem$i, rem$j))
 }

 check <- sub_fun(data, "blue", "red")
 check1 <-sub_fun(data, "red", "green"

但是输出表为空。我应该如何编写函数 子集这些数据?

1 个答案:

答案 0 :(得分:1)

删除函数体内ij周围的反逗号,否则它将仅保留"i"和{中包含"j"col1的观察结果{1}}:

col2

应该解决的问题

edit:您收到的错误是由于您试图从sub_fun <- function(data, i, j){ subs <- subset(data, col1 %in% c(i, j) & col2 %in% c(i, j)) rem <- droplevels(subs) # if you assume that only columns col1 & col2 are in data return(table(rem)) # if you have more columns in data then: # return(table(rem[, c('col1', 'col2')])) } 中提取ij,其中rem和{{1} }(由于i = 'blue'j = 'red'不是i的同名,所以没有意义。)