2011-08-23 6 views
9

私はこれを求めているが、ここでは行くのを感じる。私は数字のリストを持っていますが、それを日付と組み合わせたいと思います。繰り返しの値を列に入れて

例えば

:私は同じ日付は、データポイントがあると同じ回数を一覧表示され、その後、データポイントと組み合わせたい

list1 <- c(1, 2, 3, 4, 5) 
list2 <-c("2009-01-01") 
list3 <-cbind(list2, list1) 

date    number 
"2009-01-01"   1 
"2009-01-01"   2 
"2009-01-01"   3 
"2009-01-01"   4 
"2009-01-01"   5 

上記のコードを実行しようとすると、一致しない長さに関するメッセージが表示されます。どんな提案も感謝しています。ありがとう。

+1

私は理解していません。それは私のために働く....あなたは、(cbindが生成する)行列ではなく、data.frameを試してみたいかもしれません。また、 'list's" list "でないものを呼び出さないようにしてください。リストはRデータ型なので混乱するだけです。 –

答えて

9

私のデータフレームコメントをよりわかりやすくするために編集されました。

repはどうですか?

list1 <- 1:5 
list2 <- rep("2009-01-01",length(list1)) 
list3 <- cbind(list2, list1) 

Rのリサイクルルールに関係なく、あなたの所望の出力を与えるべきであるが。

list3 <- data.frame(date = list2, number = list1) 

あなたのケースでcbind意志が行列は、単一の型でなければならないため、文字の行列を生成するので:また、あなたは、データフレームを望んでいないことを確認しています。

2

別の答えが「完璧」だと思っているにもかかわらず投稿している理由は、cbindは「文字」という1つのベクトルを持っていたので完全に「文字」型です。

> str(list3) 
chr [1:5, 1:2] "2009-01-01" "2009-01-01" "2009-01-01" ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr [1:2] "list2" "list1 

data.frameを使用するには、混合型(日付と数値)のデータを扱う方が良いでしょう。これは、引数のリサイクルが自動的に繰り返されますので、あなたも)(担当者を使用する必要はありません追加機能を持っています、引数のいずれかがデータフレームである場合

> data.frame(dt = as.Date("2009-01-01"), l1 = list1) 
      dt l1 
1 2009-01-01 1 
2 2009-01-01 2 
3 2009-01-01 3 
4 2009-01-01 4 
5 2009-01-01 5 
+0

良い点。私はrについていくつかの経験があり、さまざまなデータ型の取り扱いを覚えています。念押し有難う。 – acesnap

1

cbindは、データフレームを返します。その場合、単にdata.frame [?cbind参照]のラッパーとして機能します。

cbindが動作し、行列を作成したというユーザーの回答とコメントでは、行列が文字行列であり、数値が文字列に合併されていません。あなたはおそらくそれを望んでいませんでした。まだ提示されていない

一つの解決策は、これを行うことです。

vector1 <- c(1, 2, 3, 4, 5); 
vector2 <- c("2009-01-01"); 
cbind(data.frame(date = vector2), number = vector1); 

最初の引数がデータフレームであるので、これはデータフレームを作成します。

しかし、私は最善を考えると、本当にあなたが欲しいものを知っていることを示すものは、直接data.frameを呼び出すことです:

data.frame(date = vector2, number = vector1); 
関連する問題