2

ベクトルとリストの要素との比較から、0と1を含むベクトルを生成するのが好きです。私は次のベクトルを持っています:

functions=c("abline", "as.numeric", "attach", "data.frame", "ddply", "mean")

この「関数」ベクトルは、このベクトルのサブセットを含むベクトルのリストに結合する必要があります。リストは次のようになります。

[[1]]
[1] "data.frame"

[[2]]
[1] "data.frame" "ddply"      "mean"      

[[3]]
[1] "data.frame" "abline"      "attach"      "mean"
... 

結果として、「関数」ベクトルに一致する各要素に1を含み、使用できない場合に0を含む、「関数」ベクトルの順序と長さに従うベクトルを生成したいと思います。それらすべてをデータフレームに入れたいと思います。この3つのリスト要素の場合、この結果は次のようになります。

    "abline" "as.numeric" "attach" "data.frame"  "ddply"  "mean"
1      0          0          0           1          0       0
2      0          0          0           1          1       1
3      1          0          1           1          0       1

誰かが私がこれをどのように達成できるか考えていますか?

最高のサブ。

4

2 に答える 2

1

データを作成する

functions=c("abline", "as.numeric", "attach", "data.frame", "ddply", "mean")

mylist <- list(
  c("data.frame"),
  c("data.frame","ddply","mean"),
  c("data.frame","abline","attach","mean")
)

次に、次のことを簡単に行うことができます。

> solution <- lapply(mylist,function(i) as.numeric(functions %in% i))

> mydf <- as.data.frame(do.call(rbind,solution))

> names(mydf) <- functions

> mydf
  abline as.numeric attach data.frame ddply mean
1      0          0      0          1     0    0
2      0          0      0          1     1    1
3      1          0      1          1     0    1
于 2012-08-09T11:08:29.873 に答える
0

ネストされた を使用できますsapply:

list <- list("data.frame",c("data.frame","ddply","mean"),c("data.frame","abline","attach","mean"))

sapply(functions,function(x) sapply(list,function(y) as.numeric(x%in%y)))
     abline as.numeric attach data.frame ddply mean
[1,]      0          0      0          1     0    0
[2,]      0          0      0          1     1    1
[3,]      1          0      1          1     0    1

factorまたは、 andを使用する場合は、1 つだけtable:

do.call("rbind",lapply(list,function(x) table(factor(x,levels=functions))))
     abline as.numeric attach data.frame ddply mean
[1,]      0          0      0          1     0    0
[2,]      0          0      0          1     1    1
[3,]      1          0      1          1     0    1
于 2012-08-09T11:18:02.240 に答える