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 80CSVを読み込む
ファイルの場所と文字コードを確認します。読み込み後に先頭行だけで判断せず、列名、型、件数を調べます。
読み込みの基本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以外の場合があります。文字化けしたまま処理せず、作成元の仕様を確認してください。
欠損・重複・範囲を確認する
列ごとの欠損数、行全体の重複、数値の範囲を確認します。異常値を自動削除せず、元データと照合します。
品質チェックR
colSums(is.na(sales))
sum(duplicated(sales))
summary(sales$quantity)
sales[sales$quantity < 0, ]欠損がない場合の例OUTPUT
date item quantity price
0 0 0 0行と列を抽出する
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新しい列を計算する
単価と数量から売上額を計算します。元の列を残すと、計算過程を確認しやすくなります。
売上額を追加R
sales$amount <- sales$quantity * sales$price
sales[, c("item", "amount")]実行結果OUTPUT
item amount
1 りんご 360
2 みかん 400
3 ぶどう 1200元データを保つ 読み込んだファイルを直接上書きせず、加工後は別名で保存します。
グループ別に集計する
同じ商品名ごとに売上額を合計します。集計前にグループ名の表記揺れがないか確認します。
商品別の合計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表を結合する
共通キーで表を結合します。キーが重複していると行数が増えるため、結合前後の件数を確認します。
商品情報を結合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 みかんミニ課題:月別売上表
日付、商品、数量、単価を持つCSVを読み、欠損と負の数量を確認してから売上額を追加し、商品別合計を別CSVへ保存してください。
確認項目
- 読み込み直後に
str()とdim()を実行したか - 欠損と重複を数えたか
- 集計前後の件数を確認したか
row.names = FALSEで保存したか
