2

私は 2 つdata.framedfを持っていwfます。

dfには、各 の時点ごとに 1 つの行がありますid。各 について、いくつかの時点 ( tpoint) が欠落していますid

私の 2 番目data.frameの ,には、それぞれのieとそれぞれwfに適切な開始と終了があります。tpointidspointepoint

dfだから私は不足している行を埋めたいと思っていtpointsます。以下は、data.frames

df <- read.table(text= "id Gid tpoint dat1 dat2 dat3
                     1   a    1     x     x  55
                     1   a    3     x     x  44
                     1   a    4     x     x  33
                     2   a    2     x     x  66
                     2   a    3     x     x  43
                     3   b    4     x     x  42
                     3   b    5     x     x  36
                     4   b    4     x     x  33
                     4   b    5     x     x  65
                     4   b    6     x     x  77
                     5   b    4     x     x  72
                     5   b    5     x     x  25
                     5   b    6     x     x  12
                     5   b    7     x     x  09",header=TRUE)

 wf <- read.table(text= "id Gid spoint epoint
                     1   a    1     5
                     2   a    1     4
                     3   b    4     6
                     4   b    4     7
                     5   b    4     7",header=TRUE)

これを行う方法を以下で見つけました。

library(plyr)

seqlist  <- apply(wf, 1, function(x) data.frame( id=x[1], 
                                                 Gid=x[2],
                                                 tpoint = seq(x[3], x[4])))
# bunch of warnings but I get the result

seqdf    <- ldply(seqlist, data.frame)
finaldf  <- merge(seqdf, df, by=c("Gid", "id", "tpoint"), all=TRUE)

行きたい場所にたどり着きましたが、醜い警告がたくさん表示されます。しかし、すべての警告は抑制されるべきだと思います。で猫の皮を剥く方法は無限にありますR。私が行方不明になっているこれを行うためのはるかに良い方法はありますか?

4

1 に答える 1

1

エラーは次の理由で発生します。

  1. データフレームへの呼び出しでapply()は、配列、この場合は文字配列に強制されます)
  2. これは、各行が名前付き文字ベクトルになったことを意味します
  3. 名前付きベクターをデータ フレームに強制すると、R はすべての名前を破棄していることを知らせます。

警告を削除するには、次のことを試してください。

seqlist  <- apply(wf, 1, function(x){
  n <- as.numeric(x[4])-as.numeric(x[3])+1
  data.frame( id=rep(x[1], n), Gid=rep(x[2], n), tpoint = x[3]:x[4])
})

seqlist
[[1]]
  id Gid tpoint
1  1   a      1
2  1   a      2
3  1   a      3
4  1   a      4
5  1   a      5

[[2]]
  id Gid tpoint
1  2   a      1
2  2   a      2
3  2   a      3
4  2   a      4

[[3]]
  id Gid tpoint
1  3   b      4
2  3   b      5
3  3   b      6

[[4]]
  id Gid tpoint
1  4   b      4
2  4   b      5
3  4   b      6
4  4   b      7

[[5]]
  id Gid tpoint
1  5   b      4
2  5   b      5
3  5   b      6
4  5   b      7
于 2012-12-05T15:48:30.803 に答える