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

问题描述 投票:-1回答:1

这是我的数据示例:原始数据有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乘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"

但输出表是空的。我该如何编写一个函数来对这些数据进行子集化?

r function conditional subset
1个回答
1
投票

删除你的函数体中ij周围的引号,否则只保留"i""j"中包含col1col2的观察:

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')]))
}

这应该够了吧

编辑:你得到的错误是由于你试图从i中提取jrem,其中i = 'blue'j = 'red'(它没有意义,因为ij不是rem的名字)。

© www.soinside.com 2019 - 2024. All rights reserved.