Menu
Coddy logo textTech

행 필터링

Coddy R 여정의 논리와 흐름 섹션에 포함된 레슨. 64개 중 44번째.

각 행마다 하나의 값을 갖는 논리형 벡터는 값이 TRUE인 행을 선택합니다. 쉼표 앞에 배치하고 열 쪽은 비워 두어 모든 열을 유지합니다:

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
print(people[people$age > 30, ])
print(nrow(people[people$age > 30, ]))

출력:

  name age   city
1  ada  36 london
3   cy  41   rome
[1] 2

&(둘 다)와 |(둘 중 하나)를 사용하여 조건을 결합합니다. 각 부분은 전체 열을 비교하므로 결과에는 여전히 각 행에 하나의 값이 있습니다:

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
print(people[people$age > 30 & people$city == "london", ])
print(people$name[people$age < 25 | people$city == "rome"])

출력:

  name age   city
1  ada  36 london
[1] "bo" "cy"

subset(df, condition)은 더 짧은 코드로 같은 작업을 수행합니다. 내부에서는 열 이름을 직접 사용할 수 있기 때문입니다:

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
older <- subset(people, age > 30)
print(older$name)

출력:

[1] "ada" "cy" 

일치하는 행이 없으면 결과는 행이 0개인 데이터 프레임이므로, 해당 데이터 프레임에서 읽기 전에 nrow()를 확인하세요:

people <- data.frame(
  name = c("ada", "bo", "cy"),
  age = c(36, 22, 41),
  city = c("london", "paris", "rome")
)
nobody <- people[people$age > 90, ]
print(nrow(nobody))
print(if (nrow(nobody) == 0) "none" else nobody$name[1])

출력:

[1] 0
[1] "none"
challenge icon

챌린지

쉬움

adults_in(df, city)를 완성하세요. df에는 name, age, city 열이 있습니다. 18세 이상이며 city에 거주하는 사람들의 이름을 행 순서대로 반환하고, , 로 연결하세요. 해당하는 사람이 없으면 none을 반환하세요.

제공된 코드는 read.csv(text = input)을 사용하여 입력에서 표를 읽습니다. 첫 번째 줄에는 열 이름이 포함되고, 그다음 줄부터는 쉼표로 구분된 값으로 각 행이 이어집니다. 입력의 마지막 줄에는 도시가 포함되며, 코드는 반환된 값을 출력합니다.

직접 해보기

adults_in <- function(df, city) {
  # 여기에 코드를 작성하세요
  "none"
}

# 제공된 입력/출력 코드: 그대로 유지하세요
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input[-length(input)])
cat(adults_in(df, input[length(input)]), sep = "\n")
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

논리와 흐름의 모든 레슨

직접 연습해 보세요: 온라인 R 컴파일러