根据多个条件将函数写入子集 df
write a function to subset df based on multiple conditions
这是我的数据示例:原始数据有 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. 然后结果将变成 table 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"
但是输出 tablea 是空的。我应该如何写一个函数
要对这些数据进行子集化?
删除函数体中 i
和 j
周围的引号,否则它将只保留 col1
中包含 "i"
或 "j"
的观察和 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')]))
}
应该可以解决问题
编辑:您收到的错误是由于您试图从 rem
中提取 i
和 j
,其中 i = 'blue'
和 j = 'red'
(没有意义,因为 i
和 j
不是 rem
的同名)。
这是我的数据示例:原始数据有 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. 然后结果将变成 table 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"
但是输出 tablea 是空的。我应该如何写一个函数 要对这些数据进行子集化?
删除函数体中 i
和 j
周围的引号,否则它将只保留 col1
中包含 "i"
或 "j"
的观察和 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')]))
}
应该可以解决问题
编辑:您收到的错误是由于您试图从 rem
中提取 i
和 j
,其中 i = 'blue'
和 j = 'red'
(没有意义,因为 i
和 j
不是 rem
的同名)。