唯一值
本课属于 Coddy R 学习旅程的“逻辑与流程”单元。第 12 课,共 64 课。
R 没有单独的集合类型:集合是不含重复值的向量。unique() 会移除重复值,并按原始顺序保留每个值第一次出现的位置。
tags <- c("r", "stats", "r", "data", "stats")
print(unique(tags))
print(length(unique(tags)))输出:
[1] "r" "stats" "data"
[1] 3duplicated() 对向量中之前已经出现过的每个值都返回 TRUE。首次出现时返回 FALSE:
ids <- c(7, 3, 7, 9, 3)
print(duplicated(ids))
print(ids[duplicated(ids)])输出:
[1] FALSE FALSE TRUE FALSE TRUE
[1] 7 3这两个函数都会比较精确的值,因此 "R" 和 "r" 是不同的。如果大小写不应产生影响,请先统一文本的大小写:
langs <- c("R", "python", "r", "Python")
print(length(unique(langs)))
print(unique(tolower(langs)))输出:
[1] 4
[1] "r" "python"unique() 也适用于数字,sort(unique(x)) 会按升序列出不同的值。sum(duplicated(x)) 会统计重复元素的数量:
rolls <- c(4, 2, 6, 2, 4, 4)
print(sort(unique(rolls)))
print(sum(duplicated(rolls)))输出:
[1] 2 4 6
[1] 3挑战
简单完成 count_distinct(tags)。忽略大小写,返回不同标签的数量:R 和 r 只计一次。
提供的代码会读取一行逗号分隔的标签,并打印返回的数量。
亲手试试
count_distinct <- function(tags) {
# 在这里编写你的代码
0
}
# 提供的输入输出代码:保持原样
input <- suppressWarnings(readLines(file("stdin")))
cat(count_distinct(strsplit(input[1], ",")[[1]]), sep = "\n")
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: R 在线编译器