1

为一个问题构建一个示例 df 导致了第二个问题。第一季度:

Q2:有没有更有效的方法来生成混合数据类型的df?这是我的尝试:

 a<-seq(2218,2221,1)
 b<-rep(58,4)
 s<-rep(22,4)
 d<-sample((100:220),4)
 e<-letters[seq(1:4)]
 f<-gl(4,1,labels="F")
 g<-factor(rep("INSTRUMENT NOT CALIBRATED",4))
 i<-factor(rep("org / initials",4))
 t<-data.frame(a,b,s,d,e,f,g,i)
 colnames(t)<-c("bSystemId","cSystemId","lengthdecimal","heightquantity","desc","code","notes","createdBy"); head(t)
 sapply(t,class)

Q1:我正在过滤数据框字段,但组合过滤器语句会部分反转过滤:

这两个语句的结果给了我想要的结果:

 a<-head(t[sapply(t,is.numeric)]);a
 b<-a[,!grepl("SystemId",names(a))];b

这些语句可以结合起来产生相同的结果吗?我已经尝试了几件事,但没有一个有效。例子,

 head(t[,!grepl("SystemId",names(t[sapply(t,is.numeric)]))])

感谢您的任何评论。

4

1 回答 1

2

您可以这样做(实际上,对您的代码进行非常小的更改):

t[sapply(t,is.numeric) & !grepl("SystemId",names(t))]

至于第二季度,我没有很好的建议。您可以尝试使用replicate来创建随机内容列表,然后mapply将其与as函数列表一起使用。例如(未经测试):

df <- as.data.frame(
  mapply(
    function(fun, col) fun(col), 
    list(as.character, as.numeric, as.factor, as.logical, as.numeric),
    replicate(5, sample(1:10), simplify=F),
    SIMPLIFY=F
  ),
  stringsAsFactors=F
)
names(df) <- paste0("V", 1:ncol(df))
sapply(df, class)
#          V1          V2          V3          V4          V5 
# "character"   "numeric"    "factor"   "logical"   "numeric"     
于 2014-02-13T19:39:17.437 回答