R言語

データフレームとCSV

表の形と品質を確認し、必要なデータを安全に整えて集計します。

01

1行と1列の意味を揃える

整然とした表では、1行が1件の観測、1列が1つの項目、1セルが1つの値を表します。列に「身長170cm」のように単位を混ぜず、数値と単位を分けます。

データフレームを作るR
sales <- data.frame(
  date = as.Date(c("2026-08-01", "2026-08-02")),
  item = c("りんご", "みかん"),
  quantity = c(3L, 5L),
  price = c(120, 80)
)
str(sales)
確認できる内容OUTPUT
'data.frame': 2 obs. of 4 variables:
 $ date    : Date, format: "2026-08-01" "2026-08-02"
 $ item    : chr  "りんご" "みかん"
 $ quantity: int  3 5
 $ price   : num  120 80
02

CSVを読み込む

ファイルの場所と文字コードを確認します。読み込み後に先頭行だけで判断せず、列名、型、件数を調べます。

読み込みの基本R
path <- file.path("data", "sales.csv")
if (!file.exists(path)) stop("CSVが見つかりません")
sales <- read.csv(path, fileEncoding = "UTF-8", na.strings = c("", "NA"))
dim(sales)
names(sales)
str(sales)
文字コード Windows由来のCSVなどではUTF-8以外の場合があります。文字化けしたまま処理せず、作成元の仕様を確認してください。
03

欠損・重複・範囲を確認する

列ごとの欠損数、行全体の重複、数値の範囲を確認します。異常値を自動削除せず、元データと照合します。

品質チェックR
colSums(is.na(sales))
sum(duplicated(sales))
summary(sales$quantity)
sales[sales$quantity < 0, ]
欠損がない場合の例OUTPUT
    date     item quantity    price
       0        0        0        0
04

行と列を抽出する

subset()では条件と列を読みやすく指定できます。列名を変数で渡すなどプログラム的な処理では角括弧を使います。

数量4個以上を抽出R
sales <- data.frame(item=c("りんご","みかん","ぶどう"), quantity=c(3,5,4), price=c(120,80,300))
subset(sales, quantity >= 4, select = c(item, quantity))
実行結果OUTPUT
    item quantity
2 みかん        5
3 ぶどう        4
05

新しい列を計算する

単価と数量から売上額を計算します。元の列を残すと、計算過程を確認しやすくなります。

売上額を追加R
sales$amount <- sales$quantity * sales$price
sales[, c("item", "amount")]
実行結果OUTPUT
    item amount
1 りんご    360
2 みかん    400
3 ぶどう   1200
元データを保つ 読み込んだファイルを直接上書きせず、加工後は別名で保存します。
06

グループ別に集計する

同じ商品名ごとに売上額を合計します。集計前にグループ名の表記揺れがないか確認します。

商品別の合計R
records <- data.frame(item=c("りんご","りんご","みかん"), amount=c(360,240,400))
aggregate(amount ~ item, data = records, FUN = sum)
実行結果OUTPUT
    item amount
1 みかん    400
2 りんご    600
07

表を結合する

共通キーで表を結合します。キーが重複していると行数が増えるため、結合前後の件数を確認します。

商品情報を結合R
sales <- data.frame(item_id=c(1,2), quantity=c(3,5))
items <- data.frame(item_id=c(1,2), item=c("りんご","みかん"))
merged <- merge(sales, items, by = "item_id", all.x = TRUE)
merged
実行結果OUTPUT
  item_id quantity   item
1       1        3 りんご
2       2        5 みかん
PRACTICE

ミニ課題:月別売上表

日付、商品、数量、単価を持つCSVを読み、欠損と負の数量を確認してから売上額を追加し、商品別合計を別CSVへ保存してください。

確認項目
  • 読み込み直後にstr()dim()を実行したか
  • 欠損と重複を数えたか
  • 集計前後の件数を確認したか
  • row.names = FALSEで保存したか