我有一个由等级组成的向量/* SPECIAL: FONT FROM RBBT.NET USED ON THIS MESSAGE BOARD */
@font-face {
font-family: 'aspire-demibold';
src: url('http://rbbt.net/aspire-demibold.ttf') format('truetype'), /* Safari, Android, iOS */
url('http://rbbt.net/aspire-demibold.woff') format('woff'); /* Modern Browsers */
}
h1 {
margin:0 auto;
text-align:center;
font-family: 'aspire-demibold', cursive;
letter-spacing: .125em;
color: #000067;
font-size: 9em;
font-weight: 700
}
。我正在尝试生成一个新的向量my_class
,其中填充了大于或等于85的top_grades
成绩。
我编写了以下代码,但my_class
向量最终为top_grades
向量的大小,所有85以下的等级都返回为NA。我认为这是因为正在构建向量时,my_class
的某些索引没有给出任何值。
top_grades
我通过在线找到一个从矢量中删除NA的方便功能解决了这个问题。
my_class = c(84, 85, 90) #sample vector
top_grades = c() #create vector
for (i in 1:length(my_class)) { #iterate for each index in the length of my_class
if (my_class[i] >= 85) {
top_grades[i] <- my_class[i] #the value of top_grades at index i is the value of my_class at index i
} else {
next #go to next index if the value of the grade at that index is lower than 85
}
}
我的问题:有没有更优雅的方法来编写这个循环来构建{NA}的 top_grades = na.omit(top_grades) #remove NA's from filled vector
向量?
答案 0 :(得分:1)
> top_grades<-my_class[my_class>=85]
> top_grades
[1] 85 90
说明:如果你使用FOR循环来遍历向量,那么你就错过了R的力量。在这个例子中,你基本上想要根据大于或等于的情况来对my_class进行子集化。 85,并将结果放入top_grades。 my_class&gt; = 85为该条件创建一个向量(length(my_class)
),其值为TRUE或FALSE。然后,此向量作为my_class上的子集调用传递,并且仅返回子集为TRUE的向量的那些部分。
(做同样的两行方式是:
high<-my_class>=85
top_grades<-my_class[high]
这完全等同于我的单行版本)
答案 1 :(得分:1)
您可以使用
简化代码top_grades <- my_class[my_class >= 85]
请注意my_class >= 85
创建一个布尔变量向量,并且只保留布尔变量为true的my_class
值。
如果您对组成top_grades
的索引感兴趣,可以运行
which(my_class >= 85)