Menu
CoddyTech

唯一值

本课属于 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] 3

duplicated() 对向量中之前已经出现过的每个值都返回 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
challenge icon

挑战

简单

完成 count_distinct(tags)。忽略大小写,返回不同标签的数量:R 和 r 只计一次。

提供的代码会读取一行逗号分隔的标签,并打印返回的数量。

亲手试试

count_distinct <- function(tags) {
  # 在这里编写你的代码
  0
}

# 提供的输入输出代码:保持原样
input <- suppressWarnings(readLines(file("stdin")))
cat(count_distinct(strsplit(input[1], ",")[[1]]), sep = "\n")
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: R 在线编译器