1
v

  id a    b     c  d
1  1 1 Adam Smith 10
2  2 2 John  Bond 15
3  3 3  Sam   Ted 20

プロンプトで次のコマンドを発行しました。

> v1<-rbind(v,rep(c(4,5,"Deb","Jones",25),5))

データフレーム v からデータフレーム v1 を作成しようとしています。v1 は次のようになります。

> v1

  id a    b     c  d
1  1 1 Adam Smith 10
2  2 2 John  Bond 15
3  3 3  Sam   Ted 20
4  4 5  Deb Jones 25
5  4 5  Deb Jones 25
6  4 5  Deb Jones 25
7  4 5  Deb Jones 25
8  4 5  Deb Jones 25

しかし、私が実際に得ているのはこれです:

> v1

  id a    b     c  d
1  1 1 Adam Smith 10
2  2 2 John  Bond 15
3  3 3  Sam   Ted 20
4  4 5  Deb Jones 25

行が に 5 回ではなく1 回しか"4 5 Deb Jones 25"表示されないのはなぜですか?v1

ここの初心者。簡単な英語で説明してください。すべての助けに感謝します。

ありがとう

4

2 に答える 2

3

repそのようには機能しません-出力をベクトルに連結するだけで、単一の行のように見えますrbind. 次に、rbind最短の長さの行に一致するように入力をトリムします。

代わりに、lapplyここで適切な長さ (5) のベクトルを使用して、毎回行を返すことができます。list_of_rows <- lapply(1:5, function(pass) list(4,5,"Deb","Jones",25))これにより、行のリストが表示されます。を使用do.call(rbind, list_of_rows)して、それを 5 つの同一の行を持つ行列に変換できます。

その行列を次のようにラップできますdata.frame

df_tmp <- data.frame(do.call(rbind, lapply(1:5, function(pass) list(4,5,"Deb","Jones",25))))

  X1 X2  X3    X4 X5
1  4  5 Deb Jones 25
2  4  5 Deb Jones 25
3  4  5 Deb Jones 25
4  4  5 Deb Jones 25
5  4  5 Deb Jones 25

問題ないようにdf_tmp見えますが、各列は実際にはリストであり、操作するのが面倒です。これを修正するにはunlist

df <-lapply(df_tmp, unlist)
str(df)

 List of 5
 $ X1: num [1:5] 4 4 4 4 4
 $ X2: num [1:5] 5 5 5 5 5
 $ X3: chr [1:5] "Deb" "Deb" "Deb" "Deb" ...
 $ X4: chr [1:5] "Jones" "Jones" "Jones" "Jones" ...
 $ X5: num [1:5] 25 25 25 25 25

c代わりに使用する以前のソリューションの問題を指摘してくれた@thelatemailに感謝しますlist

于 2016-04-18T00:12:20.553 に答える