2017-05-11 8 views
2

私は彼らが作ることを各編集のために、ウィキペディアのユーザによって寄与し、削除された言葉の人工的なデータフレームを作成しようとしていますに文字列のリストを含め、最終的な結果は次のようになります。Rは、データフレーム

Example of Dataframe

私はこのようなフレームを構築するためにいくつかのアーティファクトデータを作成しましたが、 "トークンが追加されました"と "トークンが削除されました"という変数に問題があります。

リストのリストとして作成すると、要素の長さが同じではない場合でも、データフレームにそれらを含めることができます。しかし、明らかにそうではありません。代わりに、Rは個々のトークンごとに変数を作成します。それは何百万もの変数を作り出すので実現不可能です。

a <- c(1,2,3) 
e <- list(b = as.list(c("a","b")),c = as.list(c(1L,3L,5L,4L)),d = as.list(c(TRUE,FALSE,TRUE))) 

DF <- cbind(a,e) 
U <- data.frame(a,e) 

が、私はこのようにそれを持っていると思います:ここに例示するためにいくつかのコードです

Example of desired Frame

は全くデータフレームとRで、このことは可能ですが(私はすでに答えをdearchingしようとしたが、彼ら私にとって異なる質問か技術的なものでしたか?)どんな助けでも大歓迎です!

+0

これはあなたが欲しいという意味では可能ではないと思います。 'Data.frame'sは等しい長さのベクトルのリストです。あなたがやりたい/したいことは、リストのベクトルを作成することです。私が知る限り、これは可能ではありません(http://stackoverflow.com/questions/2624791/how-to-create-a-vector-of-lists-in-rを参照) –

+0

別のオプションは、要素は文字ですが、リストが何になるのか一緒に貼り付けたバージョン –

答えて

0

すべてのご提案ありがとうございます!私はもっ​​と簡単な解決策を見つけたと思う。念のために他の誰が、これは私がやったことで、今後、同様の問題があります。

a <- c(1,2,3) 
b <- c("a","b") 
c <- c(1L,3L,5L,4L) 
d <- c(TRUE,FALSE,TRUE) 
e <- list(b,c,d);e 

DF <- data.frame(a,I(e));DF 

I()inhibit functionが明らかに変換されるからリストを防ぎ、カラムは限りちょうどリストのリストのように振る舞いますこれまでに私が知ることができるように。しかし、e列のクラスは「リスト」ではなく「AsIs」です。これで問題がさらに深刻化するかどうかはわかりませんが、もしそうならば、私はこの答えを更新します!

EDIT

だから、いくつかの機能は、入力としてASISクラスを取っていないことが判明。それを有用な文字列に変換するには、すべての行でunlist()を使うだけです。

0

これを試してみてください:(あなたがあなたの質問に示唆される)

cbind(a,lapply(e,function(x) paste(unlist(x),collapse=","))) 
0

私はあなたが何をしたいとは思わないが、リストのベクトルを使用して可能です。これは、主にRでリストのベクトルを作成できないためです(How to create a vector of lists in R?を参照)

ただし、1つのオプション(実際にはdata.frameが必要な場合)はすべてを文字に強要することになりますR)。このようなものがあなたのために働くかもしれません:

e <- c(paste0(c("a","b"),collapse=","), paste0(c(1L,3L,5L,4L), collapse = ","), paste0(c(TRUE,FALSE,TRUE), collapse = ",")) 
U <- data.frame(a,e, stringAsFactors = F) 

U 
# a    e 
#1 1    a,b 
#2 2   1,3,5,4 
#3 3 TRUE,FALSE,TRUE 

次に、分割して各セルの値を取り消すことができます。あなたがlibrary(tibble)を使用して喜んでいる場合は、正確に何をしたい行うことができます

strsplit(U$e, ",") 
1

:ような何か

library(tibble) 

a <- c(1,2,3) 
e <- list(b = as.list(c("a","b")),c = as.list(c(1L,3L,5L,4L)),d = as.list(c(TRUE,FALSE,TRUE))) 

tibble(a,e) 
# A tibble: 3 × 2 
     a   e 
    <dbl>  <list> 
1  1 <list [2]> 
2  2 <list [4]> 
3  3 <list [3]> 

tibbleまたはtbl_dfあなたは伝統的なdata.frameとするために使用されているだけのように振る舞いますが、できるようになりますさまざまな長さのリストを列に格納するような素晴らしい機能がいくつかあります。

+0

提案をありがとう! 私の例でも試してみると、このエラーが発生します: 'エラー:変数の長さは1または9でなければなりません。 問題変数: 'a'' –