・お題:Rの基本的な使い方に関して、長くなったので分けて記載することにした。今回はデータフレーム関連。思いついたら随時追加していきたい。
・とりあえず、csvを読み込む。
> df<-read.csv("test.csv")
> df
ID Name Nenshu Shusshin
1 a Tanaka 300 Tokyo
2 b Sato 400 Tokyo
3 c Suzuki 500 Hokkaido
4 d Saito 600 Hokkaido
5 e Yamada 700 Hokkaido
6 f Yamamoto 700 Hokkaido
7 g Yamaguchi 600 Okinawa
8 h Taguchi 500 Okinawa
9 I Iwamoto 300 Tokyo
10 j Takada 500 Tokyo
11 k Ueda 600 Okinawa
・データフレームやオブジェクトの構造を確認したい場合、attributes関数が便利。
> attributes(df)
$names
[1] "ID" "Name" "Nenshu" "Shusshin"
$class
[1] "data.frame"
$row.names
[1] 1 2 3 4 5 6 7 8 9 10 11
・データフレームの変数を確認したい場合、str関数やtable関数を使う。table関数では、クロス集計っぽいこともできる。
> str(df)
'data.frame': 11 obs. of 4 variables:
$ ID : chr "a" "b" "c" "d" ...
$ Name : chr "Tanaka" "Sato" "Suzuki" "Saito" ...
$ Nenshu : int 300 400 500 600 700 700 600 500 300 500 ...
$ Shusshin: chr "Tokyo" "Tokyo" "Hokkaido" "Hokkaido" ...
> table(df$Nenshu)
300 400 500 600 700
2 1 3 3 2
> table(df$Nenshu,df$Shusshin)
Hokkaido Okinawa Tokyo
300 0 0 2
400 0 0 1
500 1 1 1
600 1 2 0
700 2 0 0
・割合を調べたければ、prop.table関数を使う。
> prop.table(table(df$Nenshu,df$Shusshin))
Hokkaido Okinawa Tokyo
300 0.00000000 0.00000000 0.18181818
400 0.00000000 0.00000000 0.09090909
500 0.09090909 0.09090909 0.09090909
600 0.09090909 0.18181818 0.00000000
700 0.18181818 0.00000000 0.00000000
・何かの変数に含まれるUniqueな値を調べたければ、Unique関数を使う。
> unique(df$Shusshin)
[1] "Tokyo" "Hokkaido" "Okinawa"
・データフレームに変数を追加したい場合は、df$変数名<-で代入できる。
> df$Shincho<-c(123,134,145,156,167,178,190,132,143,154,165)
> df
ID Name Nenshu Shusshin Shincho
1 a Tanaka 300 Tokyo 123
2 b Sato 400 Tokyo 134
3 c Suzuki 500 Hokkaido 145
4 d Saito 600 Hokkaido 156
5 e Yamada 700 Hokkaido 167
6 f Yamamoto 700 Hokkaido 178
7 g Yamaguchi 600 Okinawa 190
8 h Taguchi 500 Okinawa 132
9 I Iwamoto 300 Tokyo 143
10 j Takada 500 Tokyo 154
11 k Ueda 600 Okinawa 165
・条件でデータを抜き出したい場合、以下のようにTURE/FALSEで抜き出せる。
> df$Nenshu>500
[1] FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE
[10] FALSE TRUE
> df[df$Nenshu>500,]
ID Name Nenshu Shusshin Shincho
4 d Saito 600 Hokkaido 156
5 e Yamada 700 Hokkaido 167
6 f Yamamoto 700 Hokkaido 178
7 g Yamaguchi 600 Okinawa 190
11 k Ueda 600 Okinawa 165
・Bool型は!でひっくり返すことができるので、特定の条件に合わないものを抽出することもできる。これを使って、特定の列を削除すると以下のような感じ。"Shincho"列が消えた。
> df<-df[!colnames(df)=="Shincho"]
> df
ID Name Nenshu Shusshin
1 a Tanaka 300 Tokyo
2 b Sato 400 Tokyo
3 c Suzuki 500 Hokkaido
4 d Saito 600 Hokkaido
5 e Yamada 700 Hokkaido
6 f Yamamoto 700 Hokkaido
7 g Yamaguchi 600 Okinawa
8 h Taguchi 500 Okinawa
9 I Iwamoto 300 Tokyo
10 j Takada 500 Tokyo
11 k Ueda 600 Okinawa
・どれかの列を基準に表を並び替えたいときは、order関数で行番号の順位をつけてデータをぬきだすような処理をする。例えば年収で昇順に並べると以下のような感じ。降順に並べたければ、引数decreasingにTRUEを与えればいけるっぽい。
> df[order(df$Nenshu),]
ID Name Nenshu Shusshin
1 a Tanaka 300 Tokyo
9 I Iwamoto 300 Tokyo
2 b Sato 400 Tokyo
3 c Suzuki 500 Hokkaido
8 h Taguchi 500 Okinawa
10 j Takada 500 Tokyo
4 d Saito 600 Hokkaido
7 g Yamaguchi 600 Okinawa
11 k Ueda 600 Okinawa
5 e Yamada 700 Hokkaido
6 f Yamamoto 700 Hokkaido
おわり。