написать функцию для поднабора df на основе нескольких условий - PullRequest
0 голосов
/ 04 апреля 2019

Это пример моих данных: исходные данные имеют 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"

Но выходные таблицы пусты. Как мне написать функцию подмножество этих данных?

1 Ответ

1 голос
/ 04 апреля 2019

удалите кавычки вокруг i и j в вашем теле функции, в противном случае оно сохранит только наблюдения, содержащие "i" или "j" в col1 и col2:

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

, который должен выполнить трюк

edit: ошибка, которую вы получаете, связана с тем, что вы пытались извлечь i и j из rem, где i = 'blue' и j = 'red' (это не имеет смысла, поскольку i и j не являются именами rem).

...