仅子集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))