0

値が 1 から 100 に制限されているベクトルのリストがあります。

[[1]]
[[1]][[1]]
[1] "a"

[[1]][[2]]
[1] 41  5 53 55 56


[[2]]
[[2]][[1]]
[1] "b"

[[2]][[2]]
[1] 41 1 57 53  48

どういうわけか次のdata.frameに到達するにはどうすればよいですか

  no      1        2
  1      NA        b
  41      a        b
   5      a       NA
  53      a       NA
  55      a       NA
  56      a       NA
  48     NA        b
  57     NA        b
  53     NA        b

そこから、欠落している行を埋めて、列「いいえ」の列に従って並べ替えます。1 から 100 までありますか? 例えば。

  no      1        2
  1      NA        b
  2      NA       NA
  3      NA       NA
  4      NA       NA
  5      a        NA

などなど、100行目までずっと。

4

2 に答える 2

2

最初の部分では、これを試してください:

x <- list(list("a",c(41,5,53,55,56)),list("b",c(41,1,57,53,48)))

xl <- lapply(x,function(y) `names<-`(as.data.frame(y),c("chr","no")))

xm <- merge(xl[[1]],xl[[2]],by="no",all=T)
xm
  no chr.x chr.y
1  1  <NA>     b
2  5     a  <NA>
3 41     a     b
4 48  <NA>     b
5 53     a     b
6 55     a  <NA>
7 56     a  <NA>
8 57  <NA>     b

そして2番目の場合(簡潔にするために出力を印刷していません):

merge(data.frame(no=1:100),xm,all=T)
于 2012-11-06T08:33:52.140 に答える
2

を使用したアプローチは次のlapplyとおりです。

データ:

dat <- list(list("a", c(41, 5, 53, 55, 56)), list("b", c(41, 1, 57, 53, 48)))

ソリューション:

lev <- 1:100                # the unique numbers
vec <- rep(NA, length(lev)) # a vector full of NAs

data.frame(no = lev,
           setNames(lapply(dat,
                           function(x) "[<-"(vec, lev %in% x[[2]], x[[1]])),
                    seq_along(dat)), check.names = FALSE)

出力 (最初の 10 行):

     no    1    2
1     1 <NA>    b
2     2 <NA> <NA>
3     3 <NA> <NA>
4     4 <NA> <NA>
5     5    a <NA>
6     6 <NA> <NA>
7     7 <NA> <NA>
8     8 <NA> <NA>
9     9 <NA> <NA>
10   10 <NA> <NA>
于 2012-11-06T08:44:40.270 に答える