【R】data.frameを直接弄ったりしたい
・お題:data.frameを直接弄ったりしてみたい。
・とりあえず、data.frameを作成する。
> col1<-c(1,2,3,4)
> col2<-rnorm(4,10,2)
> col3<-sample(c("a","b"),4,replace = TRUE)
> df=data.frame(col1,col2,col3)
> df
col1 col2 col3
1 1 11.516636 a
2 2 14.030368 b
3 3 6.482084 a
4 4 8.313003 b
> str(df)
'data.frame': 4 obs. of 3 variables:
$ col1: num 1 2 3 4
$ col2: num 11.52 14.03 6.48 8.31
$ col3: chr "a" "b" "a" "b"
・データフレームを表で見てみたい。View関数を使う。別ウィンドウに表が出てくる。
View(df)
・データフレームをexcelみたいに直接弄りたい場合、edit関数を使う。
edit(df)
・直接弄ることができる。
・これで直接dfを弄れたような感じがするが、df自体は変わっていない。
> df
col1 col2 col3
1 1 11.516636 a
2 2 14.030368 b
3 3 6.482084 a
4 4 8.313003 b
・編集したdata.frameをdf2などに代入すれば良い。
> df2<-edit(df)
> df2
col1 col2 col3
1 1 11.516636 a
2 2 14.030368 b
3 3 6.482084 c
4 4 8.313003 b
・少し話は変わるけれど、クリップボードからdata.frameを作成することもできる。excelなどで表を開き、クリップボードにコピー。
・read.delim("clipboard")でクリップボードの表を読み込むことができる。便利といえば便利かも。
> df3 <- read.delim("clipboard")
> df3
出席番号 名前
1 1 a
2 2 b
3 3 c
おわり。
【R】数値データを作りたい
・お題:いろいろやってみたいときに、イメージするサンプルデータをテキパキ作れるとたぶん便利。数値データを作ってみたい。
・好きに数値を入力したい。
> c(1,3,6,10)
[1] 1 3 6 10
・決まった数値を反復させたいときは、repを使う。例えば、1,2,3,1,2,3......。
> rep(c(1,2,3),4)
[1] 1 2 3 1 2 3 1 2 3 1 2 3
・整数の数列を作りたい。とりあえず公差1にしてみる。
> 1:3
[1] 1 2 3
> -2:3
[1] -2 -1 0 1 2 3
・seqの方がいろいろ出来る。とりあえず1:3と同じ出力を得る。
> seq(1,3)
[1] 1 2 3
> seq(3)#引数を一つ与えると、1スタートと補完してくれるっぽい。
[1] 1 2 3
> seq(-3)
[1] 1 0 -1 -2 -3
・公差を設定することもできる。引数byで与えても良いけれど、3つ目の引数はbyと認識されるっぽい。
> seq(1,10,4)
[1] 1 5 9
・頭とお尻の数字を与えて、指定した数に等分した数列を作ることもできる。
> seq(1,3,length.out = 6)
[1] 1.0 1.4 1.8 2.2 2.6 3.0
・正規分布は、rnorm関数で作れる。rnorm(n, mean=0, sd=1)になっている。 mean, sdで引数を与えなければデフォルト値が入る。
> rnorm(5)
[1] 0.8650296 -0.1450649 -0.8796355 0.4933396 0.2900694
> rnorm(5,100,10)
[1] 83.18139 96.50756 105.12812 92.33844 121.68040
・一様分布は、runif関数で作れる。runif(n, min=0, max=1)になっている。
> runif(5)
[1] 0.4452530 0.3242887 0.6594712 0.6731198 0.3186764
・整数ばかりにしたい場合、生成した乱数の整数部分をとって来るのが一番素直。floor関数で整数部分をとって来る。以下を参考にした。
> floor(rnorm(5,100,10))
[1] 100 101 114 110 108
・一様分布なら、数列全体を作成してからsample関数でピックアップするやり方もある。
> sample(1:10, 5, replace=TRUE)#復元抽出。同じものが出てきちゃうかも。
[1] 4 3 4 6 6
> sample(1:10, 5, replace=FALSE)#非復元抽出。同じものは出てこない筈。
[1] 8 3 5 7 6
・余談だけれど、sampleでランダムデータを作成するのは、数値データ以外のサンプルデータを作るのにも使える。
> sample(c("a","b","c","d","e","f","g"), 5, replace=FALSE)
[1] "c" "a" "b" "f" "g"
> sample(c("Male","Female"), 5, replace=TRUE)
[1] "Male" "Female" "Female" "Male" "Female"
おわり。
【R】Rの使い方メモ③(ディレクトリとかファイル)
・お題:ディレクトリ関連のメモ。随時追加。
・ワーキングディレクトリの取得。
> getwd()
[1] "C:/Users/xxxxx/Documents"
・ワーキングディレクトリの設定。例えば、デフォルトのディレクトリ中にRというフォルダ中の20230101というフォルダに設定。
>setwd("~/R/20230101")
・ワーキングディレクトリ中のファイル名を取得。フォルダは拡張子なしのファイル名になる。
> list.files()
[1] "1.txt" "2.txt" "foruda"
・テキストファイルのファイル名だけとってきたければ、引数patternに正規表現を与えれば良い。\\.txt$にすれば、テキストの文末に.txtがある場合にヒットする。
> list.files(pattern = "\\.txt$")
[1] "1.txt" "2.txt"
・ちなみに、フォルダだけとってきたい場合はlist.dirs関数でいけるっぽい。
> list.dirs()
[1] "." "./foruda"
・ファイルを作りたい。例えば、3.txtというファイルを作成。
> file.create("3.txt")
[1] TRUE
・フォルダを作りたい。例えば、foruda2というフォルダを作成。
> dir.create("foruda2")
・ファイルを削除する。例えば3.txtを削除。
> file.remove("3.txt")
[1] TRUE
・ファイルをコピーする。例えば、1.txtをforudaというフォルダにコピー。
> file.copy("1.txt","foruda")
[1] TRUE
・ファイルの名前を変える。例えば、1.txtを1-2.txtに変える。
> file.rename("1.txt","1-2.txt")
[1] TRUE
おわり。