首页 > 解决方案 > R循环列出变量的所有值

问题描述

作为练习,我必须创建一个包含变量 (a$dep) 的所有不同值的向量。可以使用以下代码创建此向量:unique(a$dep)

我需要使用 for 循环创建这个向量 我写了一个没有给出正确结果的循环,但我不明白问题出在哪里:

v<-vector()
    for (i in seq_along(a$dep)){
      v<-ifelse(a$dep[i] %in% v, v,c(v,a$dep[i]))
}

非常感谢您的帮助 !

标签: rloops

解决方案


根据描述,如果我们需要unique值,则if条件就足够了,即遍历“dep”列的序列,if元素不是(!%in%“v”,将该元素附加到“v”并通过赋值更新“v”(<-

v <- vector()
for(i in seq_along(a$dep)) {if(!a$dep[i] %in% v) v <- c(v, a$dep[i])}

由于ifelse要求所有参数都相同length,所以当我们将元素连接到它时,'v' 的长度是动态的,因此,'yes'、'no'(总是长度 1 - a$dep[i])长度不匹配。


一种选择ifelse是启动一个长度与“dep”列长度相同的向量“v”,然后用于ifelse检查“dep”元素是否是%in%整个向量(返回 TRUE/FALSE - 长度 1),然后返回空白(是 - “” - 长度 1),否则返回 'dep 的元素(否 - a$dep[i]- 长度 1)

v <- character(nrow(a))
for(i in seq_along(a$dep)) v[i] <- ifelse(a$dep[i] %in% v, "", a$dep[i])

然后删除空白元素

v[v != ""]
#[1] "a" "b" "c" "e"

用作矢量化ifelse函数很有用,在这里它的使用不是最佳的

数据

a <- data.frame(dep = c('a', 'b', 'a', 'c', 'e', 'a'))

推荐阅读