atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
R入門
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
R入門
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
R入門
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • R入門
  • データフレーム

R入門

データフレーム

最終更新:2024年11月29日 21:19

r-intro

- view
管理者のみ編集可

目次

  • 目次
  • データフレームを作成する
  • データフレームの連結(行の追加)
  • データフレームに列を追加する
  • データフレームを行列に変換する
  • データフレームから列の値が一致する行の行番号を得る
  • データフレームを並び替える
  • データフレームから特定の列を削除する
  • データフレームの行名をリセットする
  • 出納帳の残高をまとめて簡単に計算する

データフレームを作成する

data.frame関数を使う。

> no <- 1:3
> n <- 1:3
> s <- c("田中", "山本", "林")
> dt <- as.Date(c("2001-01-01", "2002-08-31", "1999-12-29"))
> dtf <- data.frame(n, s, dt)
> print(dtf)
  n    s         dt
1 1 田中 2001-01-01
2 2 山本 2002-08-31
3 3   林 1999-12-29

データフレームの連結(行の追加)

行の追加に相当するデータフレームの連結には、cbind関数を使う。連結するそれぞれのデータフレームは、フィールド数などが揃っていなければ連結することはできない。

> n1 <- c(2, 4, 6)
> n2 <- c(4, 16, 36)
> n3 <- c(3, 6, 9)
> n4 <- c(9, 36, 81)
> dtf1 <- data.frame(n1, n2)
> dtf1
  n1 n2
1  2  4
2  4 16
3  6 36
> dtf2 <- data.frame(n3, n4)
> dtf2
  n3 n4
1  3  9
2  6 36
3  9 81
> dtf <- cbind(dtf1, dtf2)
> dtf
  n1 n2 n3 n4
1  2  4  3  9
2  4 16  6 36
3  6 36  9 81

データフレームに列を追加する

transform関数を使用する。追加する際には列の名前(等号記号の左側)を指定する必要があることに注意。

> no <- 1:3
> name <- c("A", "B", "C")
> dtf <- data.frame(no, name)
> print(dtf)
  no name
1  1    A
2  2    B
3  3    C
> age <- c(20, 30, 40)
> dtf <- transform(dtf, age = age)
> print(dtf)
  no name age
1  1    A  20
2  2    B  30
3  3    C  40

データフレームを行列に変換する

as.matrix関数を使う。ただ変換しただけでは列名が残ってしまう。列名を消すにはunname関数を使う。

以下のようなテキストファイルdata.txtがカレントディレクトリにあったとする。

1,165,53,86,56,92
 2,160,47,84,52,92
 3,166,55,86,64,89
 4,164,56,90,60,95
 5,168,55,87,56,87
 6,164,54,87,57,92
 7,168,54,94,58,97
 8,169,55,88,57,92
 9,169,53,86,58,93
10,166,56,84,57,90
> dtf <- read.csv("data.txt", header = FALSE)
> dtf
   V1  V2 V3 V4 V5 V6
1   1 165 53 86 56 92
2   2 160 47 84 52 92
3   3 166 55 86 64 89
4   4 164 56 90 60 95
5   5 168 55 87 56 87
6   6 164 54 87 57 92
7   7 168 54 94 58 97
8   8 169 55 88 57 92
9   9 169 53 86 58 93
10 10 166 56 84 57 90
> mx <- as.matrix(dtf)
> mx
      V1  V2 V3 V4 V5 V6
 [1,]  1 165 53 86 56 92
 [2,]  2 160 47 84 52 92
 [3,]  3 166 55 86 64 89
 [4,]  4 164 56 90 60 95
 [5,]  5 168 55 87 56 87
 [6,]  6 164 54 87 57 92
 [7,]  7 168 54 94 58 97
 [8,]  8 169 55 88 57 92
 [9,]  9 169 53 86 58 93
[10,] 10 166 56 84 57 90
> mx <- unname(mx)
> mx
      [,1] [,2] [,3] [,4] [,5] [,6]
 [1,]    1  165   53   86   56   92
 [2,]    2  160   47   84   52   92
 [3,]    3  166   55   86   64   89
 [4,]    4  164   56   90   60   95
 [5,]    5  168   55   87   56   87
 [6,]    6  164   54   87   57   92
 [7,]    7  168   54   94   58   97
 [8,]    8  169   55   88   57   92
 [9,]    9  169   53   86   58   93
[10,]   10  166   56   84   57   90

データフレームから列の値が一致する行の行番号を得る

which関数を使う。以下、取得例。

> s <- c("h", "e", "l", "l", "o")
> n <- c(3, 1, 4, 1, 5)
> dtf <- data.frame(s, n)
> dtf
  s n
1 h 3
2 e 1
3 l 4
4 l 1
5 o 5
> idx <- which(dtf$s == "e")
> idx
[1] 2
> idx <- which(dtf$s == "l")
> idx
[1] 3 4
> idx <- which(dtf$s == "l" & dtf$n == 1)
> idx
[1] 4
> idx <- which(dtf$s == "l" & dtf$n == 5)
> idx
integer(0)

検索対象の列を列名を指定したくない場合は、連番で指定する。

> idx <- which(dtf[, 1] == "l" & dtf[, 2] == 1)
> idx
[1] 4

データフレームを並び替える

[ ]演算子とorder関数を組み合わせて使う。2つ以上の値で並び替える場合は、order関数にその並び替える順番に列を指定する。order関数による並び替えはデフォルトで昇順に並び替えられるが、これを降順にするのであればorder関数のdecreasingオプションにTRUEを与える。

> n <- c(3, 3, 1, 2)
> s1 <- c("ABC", "123", "123", "abc")
> s2 <- c("え", "う", "い", "あ")
> dtf <- data.frame(n, s1, s2)
> print(dtf)
  n  s1 s2
1 3 ABC え
2 3 123 う
3 1 123 い
4 2 abc あ
> print(dtf[order(dtf$n), ])
  n  s1 s2
3 1 123 い
4 2 abc あ
1 3 ABC え
2 3 123 う
> print(dtf[order(dtf$n, dtf$s2), ])
  n  s1 s2
3 1 123 い
4 2 abc あ
2 3 123 う
1 3 ABC え
> print(dtf[order(dtf$n, decreasing = TRUE), ])
  n  s1 s2
1 3 ABC え
2 3 123 う
4 2 abc あ
3 1 123 い

データフレームから特定の列を削除する

[ ]演算子を使用して、削除したい列の列番号を、列番号指定箇所に負数で与える。

> no <- 1:3
> name <- c("A", "B", "C")
> age <- c(20, 30, 40)
> blood <- c("AB", "B", "AB")
> dtf1 <- data.frame(no, name, age, blood)
> print(dtf1)
  no name age blood
1  1    A  20    AB
2  2    B  30     B
3  3    C  40    AB
> dtf2 <- dtf1[, -c(2, 3)]
> print(dtf2)
  no blood
1  1    AB
2  2     B
3  3    AB

データフレームの行名をリセットする

データフレームを作成すると、自動的に行名が付けられる。

> no <- c(2, 4, 1, 5, 3)
> name <- c("A", "B", "C", "D", "E")
> dtf <- data.frame(no, name)
> dtf
  no name
1  2    A
2  4    B
3  1    C
4  5    D
5  3    E

上の左端の数字のとおりに、データフレーム作成時に、最初から順番に1~5の番号が強制的に割り振られる。このデータフレームを、例えばソートすると以下のようになる。

> dtf2 <- dtf[order(dtf$no), ]
> dtf2
  no name
3  1    C
1  2    A
5  3    E
2  4    B
4  5    D

3,1,5,2,4とソート前に割り振られた番号(行名)がそのまま付いたままになる。この行名を消すにはrownames関数を使う。NULLを与えると行名はすべて消される(最初から順番に1~の番号が割り当てられる)。

> rownames(dtf2) <- NULL
> dtf2
  no name
1  1    C
2  2    A
3  3    E
4  4    B
5  5    D

例えば、以下のようなこともできる。

> rownames(dtf2) <- 5:1
> dtf2
  no name
5  1    C
4  2    A
3  3    E
2  4    B
1  5    D

出納帳の残高をまとめて簡単に計算する

例えばデータフレームとして入金と出金の情報だけがあり、これらから残高を簡単に計算してデータフレームに列として追加してみる。

データフレームdtfに以下のような情報がある状態で、残高を簡単に計算して列に追加してみる。累積の和を計算するには、cumsum関数を使えばよい。

> dtf
      年月日 内容     入   出
1 2024-07-25 入金 100000    0
2 2024-08-02 電気      0 4000
3 2024-08-04 ガス      0 3000
4 2024-08-04 水道      0 2000
5 2024-08-25 入金 120000    0
6 2024-09-03 電気      0 5000
7 2024-09-03 ガス      0 4000
> 残高 <- dtf$入 - dtf$出
> 残高 <- cumsum(残高)
> dtf1 <- cbind(dtf, 残 = 残高)
> dtf1
      年月日 内容     入   出     残
1 2024-07-25 入金 100000    0 100000
2 2024-08-02 電気      0 4000  96000
3 2024-08-04 ガス      0 3000  93000
4 2024-08-04 水道      0 2000  91000
5 2024-08-25 入金 120000    0 211000
6 2024-09-03 電気      0 5000 206000
7 2024-09-03 ガス      0 4000 202000

上の例では、残高を最初は0円ということで計算したが、これを例えば元々20万円あったとして残高を求める場合は、以下のようにすればよい。

> dtf2 <- cbind(dtf, 残 = 残高 + 200000)
> dtf2
      年月日 内容     入   出     残
1 2024-07-25 入金 100000    0 300000
2 2024-08-02 電気      0 4000 296000
3 2024-08-04 ガス      0 3000 293000
4 2024-08-04 水道      0 2000 291000
5 2024-08-25 入金 120000    0 411000
6 2024-09-03 電気      0 5000 406000
7 2024-09-03 ガス      0 4000 402000
「データフレーム」をウィキ内検索
LINE
シェア
Tweet
R入門
記事メニュー

メニュー

  • トップページ
  • Rとは
  • Rを使ってみる
  • 画面出力と入力
  • 変数とオブジェクト
  • ベクトル
  • 演算子と制御構文
  • 数と式
  • 文字と文字列
  • 正規表現
  • 日付と時刻
  • データフレーム
  • tidyverse
  • リスト
  • ファイルの入出力
  • ファイル・ディレクトリ
  • 実行とデバッグ
  • 数学
  • 行列
  • 関数
  • 統計学
  • 統計解析
  • 数値計算
  • 応用
  • 時系列解析
  • 地理空間情報
  • Rの操作
  • データベース
  • パッケージ

  • 環境
  • インターネット
  • 作図
  • 画像

  • 本の計算を再現
  • セイバーメトリクス
  • その他


ここを編集
記事メニュー2

更新履歴

取得中です。

ここを編集
人気記事ランキング
  1. インターネット
  2. tidyverse
  3. 日付と時刻
  4. 応用
  5. 正規表現
もっと見る
最近更新されたページ
  • 33日前

    tidyverse
  • 36日前

    インターネット
  • 47日前

    日付と時刻
  • 47日前

    応用
  • 47日前

    文字と文字列
  • 64日前

    変数とオブジェクト
  • 107日前

    その他
  • 108日前

    画像
  • 112日前

    ファイルの入出力
  • 114日前

    ファイル・ディレクトリ
もっと見る
人気記事ランキング
  1. インターネット
  2. tidyverse
  3. 日付と時刻
  4. 応用
  5. 正規表現
もっと見る
最近更新されたページ
  • 33日前

    tidyverse
  • 36日前

    インターネット
  • 47日前

    日付と時刻
  • 47日前

    応用
  • 47日前

    文字と文字列
  • 64日前

    変数とオブジェクト
  • 107日前

    その他
  • 108日前

    画像
  • 112日前

    ファイルの入出力
  • 114日前

    ファイル・ディレクトリ
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. R.E.P.O. 日本語解説Wiki
  2. VCR GTA3まとめウィキ
  3. ガンダムGQuuuuuuX 乃木坂46部@wiki
  4. ドタバタ王子くん攻略サイト
  5. ありふれた職業で世界最強 リベリオンソウル @ ウィキ
  6. STAR WARS ジェダイ:サバイバー攻略 @ ウィキ
  7. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  8. アサシンクリードシャドウズ@ ウィキ
  9. パズル&コンクエスト(Puzzles&Conquest)攻略Wiki
  10. SYNDUALITY Echo of Ada 攻略 ウィキ
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. oblivion xbox360 Wiki
  6. 発車メロディーwiki
  7. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  8. 検索してはいけない言葉 @ ウィキ
  9. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  10. SDガンダム ジージェネレーションクロスレイズ 攻略Wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  2. 参加者一覧 - ストグラ まとめ @ウィキ
  3. フェルシー・ロロ - アニヲタWiki(仮)
  4. サーヴァント/一覧/クラス別 - Fate/Grand Order @wiki 【FGO】
  5. RqteL - ストグラ まとめ @ウィキ
  6. ロスサントス警察 - ストグラ まとめ @ウィキ
  7. 掲示板(時限)/ジークアクス - 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  8. ロスサントス救急救命隊 - ストグラ まとめ @ウィキ
  9. 発車メロディー変更履歴 - 発車メロディーwiki
  10. 揚げバター - アニヲタWiki(仮)
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.