首页 > 解决方案 > 使用 for 循环将布尔向量简单转换为字符串向量

问题描述

我对 R 很陌生,大约一个小时。

我有一个简单的一个月的正利润率向量,它返回 12 个项目为 True 或 False,并称这个向量为 good_months

我正在尝试生成一个类似的向量,该向量返回所有为真值的等效月份名称。

例如:

Good months 
TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE FALSE FALSE  TRUE
# which represents positive profit margins for Jan, Jun, Jul, Aug, Sept, Dec 

我写了一个简单的 for 循环,但不幸的是它返回了一个向量。我将如何纠正这一点?

list_of_good_months <- c()
length(list_of_good_months)

for(i in 1:12){
  if(good_months[i] == TRUE){
    list_of_good_months[i] <- months[i]
  }
  else{
    list_of_good_months[i] <- " "
  }
}

list_good_months
length(list_of_good_months)

控制台输出:

**[1] 0
> 
> for(i in 1:12){
+   if(good_months[i] == TRUE){
+     list_of_good_months[i] <- months[i]
+   }
+   else{
+     list_of_good_months[i] <- " "
+   }
+ }
> 
> list_good_months
[1] "Sep"
> length(list_of_good_months)
[1] 12**

标签: rfor-loop

解决方案


R 是一种矢量化语言,很少需要编写显式for循环来实现目标。

有内置向量month.abbmonth.name您可以在此处使用它,并使用good_months.

good_months <- c(TRUE, FALSE, FALSE, FALSE, FALSE,  TRUE,  TRUE,  TRUE,  TRUE, FALSE, FALSE,  TRUE)

list_of_good_months  <- month.abb[good_months]
list_of_good_months
#[1] "Jan" "Jun" "Jul" "Aug" "Sep" "Dec"

要用空格替换FALSE值,您可以使用 -

list_of_good_months <- month.abb
list_of_good_months[!good_months] <- ''
list_of_good_months

# [1] "Jan" ""    ""    ""    ""    "Jun" "Jul" "Aug" "Sep" ""    ""    "Dec" 

推荐阅读