面试|R语言面试问题集2
编者按:【R语言面试问题集】是从网络上面收集和整理R的语言面试过程中基础的重要的问题集。通过这些问题的学习与解答,一来作为R语言知识掌握的检测,二来感受R语言在各方面的应用。您遇到什么R语言面试问题集?请给我留言。我创建了R语言微信群,定位是R语言学习与实践,需要入群的朋友,请添加我的微信:luqin360,备注:R语言入群。
续接《R语言面试问题集1》, 本文汇总5个R语言面试问题。
R语言面试问题集2
16. 聚类是什么?kmeans聚类和层次聚类的区别是什么?
Cluster是属于同一个类的一组对象。 聚类是将一组抽象对象转换为相似对象的类的过程。
让我们看看为什么在数据分析中需要聚类:
-
可伸缩性——我们需要高度可伸缩的聚类算法来处理大型数据库。
-
能够处理不同类型的属性—算法应该能够应用于任何类型的数据,例如基于区间(数值)的数据、分类数据和二进制数据。
-
发现具有属性形状的聚类 – 聚类算法应该能够检测任意形状的聚类。 它们不应仅限于那些倾向于找到小尺寸球形簇的距离测量。
-
高维度 – 聚类算法不仅应该能够处理低维数据,还应该能够处理高维空间。
-
处理嘈杂数据的能力 – 数据库包含嘈杂,缺失或错误的数据。 某些算法对此类数据敏感,可能导致质量较差的群集。
-
可解释性 – 聚类结果应该是可解释的,可理解的和可用的。
K-MEANS聚类:
K均值聚类是众所周知的划分方法。 在该方法中,对象被分类为属于K组之一。 划分方法的结果是一组K个簇,每个数据集的对象属于一个簇。 在每个簇中,可能存在质心或簇代表。 在我们考虑实值数据的情况下,簇内所有对象的属性向量的算术平均值提供了适当的代表; 在其他情况下可能需要替代类型的质心。
示例:文档聚类可以由聚类中某些最小数量的文档中出现的关键字列表表示。 如果聚类的数量很大,则可以进一步聚类质心以在数据集内生成层次结构。 K-means是一种数据挖掘算法,它执行数据样本的聚类。 为了聚类数据库,K-means算法使用迭代方法。
R 代码
# Determine number of clusters
wss <- (nrow(mydata)-1)*sum(apply(mydata,2,var))
for (i in 2:15) wss[i] <- sum(kmeans(mydata,
centers=i)$withinss)
plot(1:15, wss, type=”b”, xlab=”Number of Clusters”,
ylab=”Within groups sum of squares”)
# K-Means Cluster Analysis
fit <- kmeans(mydata, 5) # 5 cluster solution
# get cluster means
aggregate(mydata,by=list(fit$cluster),FUN=mean)
# append cluster assignment
mydata <- data.frame(mydata, fit$cluster)
可以使用pam()而不是kmeans()调用基于mediods的健壮版本的K-means。fpc包中的pamk()函数是pam的包装器,它还根据最佳平均轮廓宽度打印建议的集群数量。
层次聚类:
该方法对给定的数据对象集创建层次分解。我们可以根据层次分解的形成对层次方法进行分类。
这里有两种方法:
-
凝聚的方法
-
分裂的方法
凝聚的方法
这种方法也称为自底向上方法。在这里,我们从每个对象为一个单独的组开始。它不断地合并彼此接近的对象或组。它一直这样做,直到所有组合并为一个组,或者直到终止条件成立为止。
分裂的方法:
这种方法也称为自顶向下方法。在这里,我们从同一个集群中的所有对象开始。在连续迭代中,一个集群被分割成更小的集群。直到一个集群中的每个对象或终止条件保持不变为止。这种方法是严厉的,即,一旦合并或拆分完成,就永远无法撤消。
R代码
Cars example
# The mtcars data set is built into R:
help(mtcars)
# We will focus on the variables that are continuous in nature rather than discrete:
cars.data <- mtcars[,c(1,3,4,5,6,7)]
# Standardizing by dividing through by the sample range of each variable
samp.range <- function(x){
myrange <- diff(range(x))
return(myrange)
}
my.ranges <- apply(cars.data,2,samp.range)
cars.std <- sweep(cars.data,2,my.ranges,FUN=”/”)
# Getting distance matrix:
dist.cars <- dist(cars.std)
# Single linkage:
cars.single.link <- hclust(dist.cars, method=’single’)
# Plotting the single linkage dendrogram:
plclust(cars.single.link, labels=row.names(cars.data), ylab=”Distance”)
# Opening new window while keeping previous one open
windows()
# complete linkage:
cars.complete.link <- hclust(dist.cars, method=’complete’)
# Plotting the complete linkage dendrogram:
plclust(cars.complete.link, labels=row.names(cars.data), ylab=”Distance”)
# Average linkage:
cars.avg.link <- hclust(dist.cars, method=’average’)
# Plotting the average linkage dendrogram:
plclust(cars.avg.link, labels=row.names(cars.data), ylab=”Distance”)
# Average Linkage dendrogram seems to indicate two major clusters,
# Single Linkage dendrogram may indicate three.
# Single Linkage Solution:
cut.3 <- cutree(cars.single.link, k=3)
# printing the “clustering vector”
cut.3
cars.3.clust <- lapply(1:3, function(nc) row.names(cars.data)[cut.3==nc])
# printing the clusters in terms of the car names
cars.3.clust
# Cluster 1 seems to be mostly compact cars, Cluster 2 is sports cars, Cluster 3 is large Luxury sedans
17. 给出R中的“rbind()”和“cbind()”函数的例子
Cbind():顾名思义,它用于将两列绑定在一起。绑定两列时要记住的一个事实是,两列中的行数必须相同。
让我们用一个例子来理解这一点:
这是“Marks”数据集,包含三个主题的标记

我们将绑定一个新的数据集“percent”绑定它,它由两列组成。

让我们使用cbind
函数把两个数据集的列合并起来
cbind(Marks,Percentage)

由于这两个数据集中的行数是相同的,所以我们在“cbind()”函数的帮助下合并了列
18. 给出R中的while和for循环的例子。
While循环:

For循环:

19. 举例说明“dplyr”包中的“select”和“filter”函数。

Select:这个来自“dplyr”包的函数用于从数据集中选择一些特定的列
Birth_weight %>% select(1,2,3)->birth

Birth_weight %>% select(-5)->birth

Filter:这个来自“dplyr”包的函数用于根据一个条件过滤掉一些行:
Birth_weight %>% filter(mother_age>35)->birth

Birth_weight %>% filter(baby_wt>125 & smoke=="smoker")->birth

20.stringR包的用途是什么?给出一些Stringr中的函数示例。
StringR中的一些函数:
初始化
fruit <- c('apple', 'orange', 'grape', 'banana', 'guava')
把字符串转换为大写
str_to_upper(fruit)

查找字母的数
str_count(fruit)

你若是觉得有用,清点赞并分享给其它朋友。更多数据知识,请点击阅读原文。您有任何问题,请留言。
内容推荐
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!