列と行
CoddyのRジャーニー「ロジックとフロー」セクションの一部。レッスン 43/64。
df$col と df[["col"]] は列をプレーンベクトルとして返すため、すべてのベクトル関数を適用できます。[[ ]] には、変数に格納された列名を指定できます。
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people$age)
print(mean(people$age))
col <- "city"
print(people[[col]])出力:
[1] 36 22 41
[1] 33
[1] "london" "paris" "rome" 角括弧は行列のように [row, column] を受け取ります。空の側はすべてを選択し、列は名前で選択できます。
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people[2, ])
print(people[, c("name", "city")])出力:
name age city
2 bo 22 paris
name city
1 ada london
2 bo paris
3 cy rome1つのセルは df[row, column] であり、そこに代入すると値が変更されます。列全体への代入も同じように機能します。
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people[3, "age"])
people[3, "age"] <- 42
people$city <- toupper(people$city)
print(people)出力:
[1] 41
name age city
1 ada 36 LONDON
2 bo 22 PARIS
3 cy 42 ROME行を1つずつ確認するには、seq_len(nrow(df)) をループ処理し、df[i, "col"] または df$col[i] で各セルを読み取ります。
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
for (i in seq_len(nrow(people))) {
cat(people$name[i], "lives in", people[i, "city"], "\n")
}出力:
ada lives in london
bo lives in paris
cy lives in rome チャレンジ
簡単person_card(df, i)を完成させてください。行 i について、列ごとに1行ずつ、列名とその行の値を name: bo の形式で、列の順序どおりに返してください。
提供されたコードは、read.csv(text = input)を使用して入力から表を読み込みます。最初の行には列名が含まれ、その後の各行が1つの行となっており、値はコンマで区切られています。入力の最後の行には i が含まれ、コードは返された各行を出力します。
自分で試してみよう
person_card <- function(df, i) {
# ここにコードを書いてください
character(0)
}
# 提供された入出力コード:そのままにしておいてください
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input[-length(input)])
i <- as.numeric(input[length(input)])
cat(person_card(df, i), sep = "\n")
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Rオンラインコンパイラ