1

質問のサンプル df を作成すると、2 番目の質問が発生しました。最初の第 2 四半期:

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: データ フレーム フィールドをフィルタリングしていますが、フィルター ステートメントを組み合わせると、フィルタリングが部分的に逆になります。

これら 2 つのステートメントの結果は、私が望む結果をもたらします。

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

Q2 に関しては、私は素晴らしい提案を持っていません。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 に答える