いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【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関数で整数部分をとって来る。以下を参考にした。

www.cookbook-r.com

> 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

 

おわり。