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

R入門

データフレーム

最終更新:2025年06月22日 13:20

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 い

データフレームの行を逆順に並び替える

nrow関数でそのデータフレームの全行数を取得し、行のインデックスに全行数~1となる数値ベクトルを指定すればよい。以下は、あらかじめ用意したデータフレームcharaで行を逆順に並び替えた例。

> chara
              name      seiyu
1       セナディア 鈴木みのり
2           フィー 和多田美咲
3         マーシル 石見舞菜香
4 メイショウドトウ 和多田美咲
5       メレアーデ 石見舞菜香
6   ライスシャワー 石見舞菜香
7             リフ 瀬戸麻沙美
> chara[nrow(chara):1, ]
              name      seiyu
7             リフ 瀬戸麻沙美
6   ライスシャワー 石見舞菜香
5       メレアーデ 石見舞菜香
4 メイショウドトウ 和多田美咲
3         マーシル 石見舞菜香
2           フィー 和多田美咲
1       セナディア 鈴木みのり

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

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

> 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

更新履歴

取得中です。

ここを編集
最近更新されたページ
  • 14日前

    データフレーム
  • 17日前

    リスト
  • 41日前

    行列
  • 44日前

    tidyverse
  • 81日前

    インターネット
  • 93日前

    日付と時刻
  • 93日前

    応用
  • 93日前

    文字と文字列
  • 109日前

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

    その他
もっと見る
最近更新されたページ
  • 14日前

    データフレーム
  • 17日前

    リスト
  • 41日前

    行列
  • 44日前

    tidyverse
  • 81日前

    インターネット
  • 93日前

    日付と時刻
  • 93日前

    応用
  • 93日前

    文字と文字列
  • 109日前

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

    その他
もっと見る
ウィキ募集バナー
新規Wikiランキング

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

  1. MadTown GTA (Beta) まとめウィキ
  2. R.E.P.O. 日本語解説Wiki
  3. シュガードール情報まとめウィキ
  4. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  5. SYNDUALITY Echo of Ada 攻略 ウィキ
  6. ソードランページ @ 非公式wiki
  7. 星飼いの詩@ ウィキ
  8. ドラゴンボール Sparking! ZERO 攻略Wiki
  9. GTA5 MADTOWN(β)まとめウィキ
  10. シミュグラ2 @ ウィキ
もっと見る
人気Wikiランキング

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

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

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

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  3. 金 - アニヲタWiki(仮)
  4. 868 - ストグラ まとめ @ウィキ
  5. シャア専用ヅダ - アニヲタWiki(仮)
  6. ジロリアンコピペ - ラーメン二郎 wiki
  7. モンスター一覧_第2章 - モンスター烈伝オレカバトル2@wiki
  8. サーヴァント/一覧/クラス別 - Fate/Grand Order @wiki 【FGO】
  9. ロスサントス警察 - ストグラ まとめ @ウィキ
  10. 参加者一覧 - MadTown GTA (Beta) まとめウィキ
もっと見る

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

2019 AtWiki, Inc.