2

我有两个data.framesdfwf.

df每个时间点都有一行idtpoint每个 都缺少一些时间点 ( ) id

我的第二个data.frame,分别对每个ie和wfend 都有适当的开头和结尾。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 回答