如何使用另一个向量上的条件创建新向量?

时间:2018-03-22 03:45:00

标签: r loops

我有一个由等级组成的向量/* 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 向量?

2 个答案:

答案 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)