Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅子集R data.frame中的可能组合_R_Function_Loops_Dataframe_Subset - Fatal编程技术网

仅子集R data.frame中的可能组合

仅子集R data.frame中的可能组合,r,function,loops,dataframe,subset,R,Function,Loops,Dataframe,Subset,函数foo强制子集在任何子集中始终包含时间的所有值 例如,如果我只想从dat中子集prof==1,foo还添加time==1;时间==2;时间==3;该子集的时间==4 但有时添加一些time(在本例中time==1和time==4)会导致subset抛出错误,因为没有此类子设置的数据 我想知道如何在我的输出中过滤掉这样的错误,即只获取可能的子项的输出(这里time==2和3) 注意:数据是玩具,欢迎使用功能解决方案 # data.frame: dat <- data.frame(time

函数
foo
强制
子集
在任何子集中始终包含
时间
的所有值

例如,如果我只想从
dat
中子集
prof==1
foo
还添加
time==1;时间==2;时间==3;该子集的时间==4

但有时添加一些
time
(在本例中
time==1
time==4
)会导致
subset
抛出错误,因为没有此类子设置的数据

我想知道如何在我的输出中过滤掉这样的错误,即只获取可能的子项的输出(这里
time==2和3

注意:数据是玩具,欢迎使用功能解决方案

# data.frame:
dat <- data.frame(time = c(1,3,2,4), prof = c(2,1,1,2)) 

# Function:
foo <- function(data, mod){

     tim <- sort(unique(data$time))

        s <- substitute(mod)
        G <- lapply(tim, function(x) bquote(.(s) & time == .(x)))

       lapply(1:length(G), function(i) subset(data, G[[i]]))
}
# EXAMPLE OF USE:
foo(dat, prof == 1) # Error in subset(data, G[[i]]) : 'subset' must be logical

# DESIRED OUTPUT:
 [[1]]
   time prof
 1    2    1

[[2]]
  time prof
1    3    1
#data.frame:

dat您得到的错误是
“子集”必须是逻辑的
,这意味着
子集
不知道如何处理
调用
bquote
生成的对象。将
G[[i]]
放入
eval
应该可以让事情正常进行:


dat将数据帧子集,按时间元素将其拆分:

    subset_df <- function(df, prof_no){


      split(df[df$prof == prof_no,], df[df$prof == prof_no, "time"]) 


}
使用的数据:

dat <- data.frame(time = c(1,3,2,4), prof = c(2,1,1,2)) 

dat您可以在函数中再添加一行:
res0])
@jay.sf完全放弃函数,只需执行
dat[dat$prof==1,]
。但我认为OP可能有一些计划,但不是很明显,这就是为什么我只是指出了他的功能中的错误,而不是对其进行改进。是的,我的意思是,通过这一添加,我们将实现OP预期的输出。
dat <- data.frame(time = c(1,3,2,4), prof = c(2,1,1,2))