22  データフレーム(データフレームを作成しよう)(L26)

それでは、データフレームを作成していきましょう!

と、その前に、注意点としては、

  1. ここでの作り方は、あくまで基本を理解するための方法です。
  2. 多くの場合は、次の章の「インポート」を行う事で、データフレームが勝手に出来上がるので、ここでご紹介するやり方は必要ありません
  3. 「めんどくさい」ですが、1回だけ、手を動かしてみて下さい。

データフレームを作成するためには、data.frame関数を利用します。 この関数、使い方は難しくなくて、

data.frame(<列名>=<ベクトル>, <列名>=<ベクトル>, ... )

という書き方をすればOKです。実際にやっていましょう。

numberという列名と、nameという列名に、それぞれ次のようにc()でベクトルを作成して入れてあげると、

data.frame(number = c(1,2,3,4),name = c("Aさん","Bさん","Cさん","Dさん"))
  number  name
1      1 Aさん
2      2 Bさん
3      3 Cさん
4      4 Dさん

なんとなく、表っぽい結果が返ってきました! ここで、書き方ですが、

data.frame(number = c(1,2,3,4),
           name = c("Aさん","Bさん","Cさん","Dさん"))
  number  name
1      1 Aさん
2      2 Bさん
3      3 Cさん
4      4 Dさん
data.frame(
  number = c(1,2,3,4),
  name = c("Aさん","Bさん","Cさん","Dさん")
)
  number  name
1      1 Aさん
2      2 Bさん
3      3 Cさん
4      4 Dさん

こんな感じで、カンマの前後であれば改行しても大丈夫です。 他にも、

vec_num <- c(1,2,3,4)
vec_name <- c("A","B","C","D")

data.frame(number = vec_num, name = vec_name)
  number name
1      1    A
2      2    B
3      3    C
4      4    D

という風に、ベクトルを他の変数に入れてあげて作成することもできます。

書き方が行く通りにもあって最初は混乱するかもしれませんが、うまく改行や複雑な部分を変数にいれることができれば、すっきりと読みやすいコードになりますので、慣れてきたら、読みやすいコードを意識して書いてみてもよいかもしれません。

ところで、表の要素の長さが違うとどういうことがおこるでしょう?

data.frame(number = c(1,2,3),
           name = c("Aさん","Bさん","Cさん","Dさん"))
Error in data.frame(number = c(1, 2, 3), name = c("Aさん", "Bさん", : arguments imply differing number of rows: 3, 4

エラーがでましたね。ベクトルの行数が違うと怒られました。

こんな感じで、ベクトルの長さが同じでないとデータフレームは作成できないので、注意が必要です。

ただし、それぞれの行数が、最大の行数の整数倍になっているのであれば、(今回のケースであれば、nameが4行なので、numberが2行とか)であれば、エラーは起こらず、勝手に複製されます。

data.frame(number = c(1,2),
           name = c("Aさん","Bさん","Cさん","Dさん"))
  number  name
1      1 Aさん
2      2 Bさん
3      1 Cさん
4      2 Dさん

以上、データフレームの作成のやり方でした。 次は、データフレームの操作方法を少しだけ紹介します。