Skip to content

Commit

Permalink
Add challenges for data frames and data manipulation in index.qmd
Browse files Browse the repository at this point in the history
  • Loading branch information
kozo2 committed Nov 23, 2024
1 parent befd273 commit 645b99f
Showing 1 changed file with 148 additions and 0 deletions.
148 changes: 148 additions & 0 deletions index.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -625,6 +625,154 @@ setwd() コマンドを使用するか、RStudio のメニューを使って作
1. コンソールで setwd("data") と入力し、Enter を押します。その後、getwd() と入力して Enter を押し、新しい作業ディレクトリを確認します。
2. RStudio ウィンドウ上部のメニューで「Session」をクリックし、「Set Working Directory」を選択して「Choose Directory」をクリックします。その後、開いたウィンドウでプロジェクトディレクトリに戻り、「Open」をクリックします。コンソールに setwd コマンドが自動的に表示されます。

# R のデータ構造とデータフレーム

## チャレンジ:データフレームから変数、観測値、要素を取得する

下記の例を試して、それぞれが何を返すのかを説明してください。

- cats[1]
- cats[[1]]
- cats$coat
- cats["coat"]
- cats[1, 1]
- cats[, 1]
- cats[1, ]

ヒント: 返されるものを調べるには、typeof() 関数を使用してください。

## チャレンジ:データフレームの作成

次の構文を使用して、新しいデータフレームを R 内で作成できます:

``` r
df <- data.frame(id = c("a", "b", "c"),
x = 1:3,
y = c(TRUE, TRUE, FALSE))
```

以下の情報を持つデータフレームを作成してください:

-
-
- ラッキーナンバー

次に、rbind を使用して隣の人のエントリを追加しましょう。
最後に、cbind を使用して「コーヒーブレイクの時間ですか?」という質問への各人の回答を含む列を追加してください。

## チャレンジ:データフレームの確認

データの最後の数行や中間のいくつかの行も確認するのが良い習慣です。これをどのように行いますか?

特に中間の行を探すのは難しくありませんが、ランダムな行をいくつか取得することもできます。これをどのようにコード化しますか?

## チャレンジ:再現性のある分析のためのコードの保存と再利用

File -> New File -> R Script に移動し、`gapminder` データセットを読み込むための R スクリプトを作成します。このスクリプトを `scripts/` ディレクトリに保存し、バージョン管理に追加してください。

その後、`source` 関数を使用してスクリプトを実行します。ファイルパスを引数として指定するか、RStudio の「Source」ボタンを押します。

# データの部分集合化

## チャレンジ:データの部分の取得

次のコードが与えられた場合:

``` r
x <- c(5.4, 6.2, 7.1, 4.8, 7.5)
names(x) <- c('a', 'b', 'c', 'd', 'e')
print(x)
```
```
a b c d e
5.4 6.2 7.1 4.8 7.5
```

次の出力を生成する少なくとも 2 つの異なるコマンドを考え出してください:
```
b c d
6.2 7.1 4.8
```

2 つの異なるコマンドを見つけたら、隣の人と比較してみてください。異なる戦略を持っていましたか?

## チャレンジ:条件を満たす部分の取得

以下のコードを用いて:

``` r
x <- c(5.4, 6.2, 7.1, 4.8, 7.5)
names(x) <- c('a', 'b', 'c', 'd', 'e')
print(x)
```
```
a b c d e
5.4 6.2 7.1 4.8 7.5
```

`x` から 4 より大きく 7 未満の値を返すサブセットコマンドを書いてください。

## チャレンジ:データを抽出するための論理ベクトルの作成1

ベクトルの要素を、特定のリスト内のいずれかと一致させる操作は、データ解析で非常に一般的なタスクです。
例えば、`gapminder` データセットには `country``continent` の変数がありますが、これらの間の情報は含まれていません。
東南アジアの情報を抽出したいとします。このとき、どのようにして東南アジアのすべての国について `TRUE`、それ以外を `FALSE` とする論理ベクトルを作成しますか?

以下のデータを使用します:

``` r
seAsia <- c("Myanmar","Thailand","Cambodia","Vietnam","Laos")
## エピソード2でダウンロードした gapminder データを読み込む
gapminder <- read.csv("data/gapminder_data.csv", header=TRUE)
## データフレームから `country` 列を抽出(詳細は後述);
## factor を文字列に変換;
## 重複しない要素のみ取得
countries <- unique(as.character(gapminder$country))
```

## チャレンジ:データを抽出するための論理ベクトルの作成2

以下の3つの方法を試し、それぞれがどのように(正しくない、または正しい方法で)動作するのか説明してください:

1. 間違った方法(`==` のみを使用)
2. 不格好な方法(論理演算子 `==``|` を使用)
3. エレガントな方法(`%in%` を使用)

## チャレンジ:データフレームサブセットエラーの修正

以下の一般的なデータフレームサブセットエラーを修正してください:

1. 年 1957 の観測値を抽出する
``` r
gapminder[gapminder$year = 1957,]
```

2. 1列目から4列目以外のすべての列を抽出する
``` r
gapminder[,-1:4]
```

3. 寿命が80年以上の行を抽出する
``` r
gapminder[gapminder$lifeExp > 80]
```

4. 1行目と4列目、5列目(`continent``lifeExp`)を抽出する
``` r
gapminder[1, 4, 5]
```

5. 応用:年 2002 年と 2007 年の情報を含む行を抽出する
``` r
gapminder[gapminder$year == 2002 | 2007,]
```

## チャレンジ:データフレームのサブセットへのアクセス

1. なぜ `gapminder[1:20]` はエラーを返すのでしょうか? `gapminder[1:20, ]` とはどう異なるのでしょうか?

2. 行 1 から 9 と 19 から 23 のみを含む新しい `data.frame` を作成し、それを `gapminder_small` と名付けてください。この操作は 1 ステップまたは 2 ステップで行うことができます。

<!-- FIX ME: Add after receiving feedback
## よくできたこと
Expand Down

0 comments on commit 645b99f

Please sign in to comment.