Menu
Coddy logo textTech

Unikalne wartości

Część sekcji Logika i przepływ sterowania ścieżki R w Coddy. Lekcja 12 z 64.

R nie ma osobnego typu zbioru: zbiór to wektor bez powtarzających się wartości. unique() usuwa powtórzenia i zachowuje pierwsze wystąpienie każdej wartości w pierwotnej kolejności.

tags <- c("r", "stats", "r", "data", "stats")
print(unique(tags))
print(length(unique(tags)))

Wynik:

[1] "r"     "stats" "data" 
[1] 3

duplicated() zwraca TRUE dla każdej wartości, która pojawiła się już wcześniej w wektorze. Pierwsze wystąpienie ma wartość FALSE:

ids <- c(7, 3, 7, 9, 3)
print(duplicated(ids))
print(ids[duplicated(ids)])

Wynik:

[1] FALSE FALSE  TRUE FALSE  TRUE
[1] 7 3

Obie funkcje porównują dokładne wartości, więc "R" i "r" są różne. Najpierw ujednolić tekst, gdy wielkość liter nie powinna mieć znaczenia:

langs <- c("R", "python", "r", "Python")
print(length(unique(langs)))
print(unique(tolower(langs)))

Wynik:

[1] 4
[1] "r"      "python"

unique() działa również na liczbach, a sort(unique(x)) wyświetla różne wartości w kolejności rosnącej. sum(duplicated(x)) zlicza, ile elementów się powtarza:

rolls <- c(4, 2, 6, 2, 4, 4)
print(sort(unique(rolls)))
print(sum(duplicated(rolls)))

Wynik:

[1] 2 4 6
[1] 3
challenge icon

Wyzwanie

Łatwy

Uzupełnij count_distinct(tags). Zwróć liczbę różnych tagów, ignorując wielkość liter: R i r liczą się jako jeden.

Dostarczony kod odczytuje tagi z wiersza, w którym są oddzielone przecinkami, i wyświetla zwróconą liczbę.

Spróbuj swoich sił

count_distinct <- function(tags) {
  # Wpisz tutaj swój kod
  0
}

# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input <- suppressWarnings(readLines(file("stdin")))
cat(count_distinct(strsplit(input[1], ",")[[1]]), sep = "\n")
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator R online