通过在列表上传递逻辑测试来填充向量

时间:2017-10-09 07:50:16

标签: r

通过传递下面的代码行来创建列表。

ID <- (sapply(strsplit(as.character(ncv$`Identity Number`), ""), as.numeric))

列表长度:

length(ID)
#[1] 3041

当我在head()上致电ID时,会出现以下(见下文)预期结果。

head(ID, 2)

#[[1]]
# [1] 9 4 1 2 0 7 0 6 0 4 0 8 5

#[[2]]
# [1] 9 6 1 0 0 3 5 1 8 3 0 8 3

我希望创建一个填充了字符串的矢量,&#34;女性&#34; 每次列表对象的第7个元素小于或等于4。 否则它应该返回&#34;男性&#34;向量。

   gender <- vector(length = 3041)

    for(i in 1:3041){
      if(ID[[i]][7] <= 4){
        gender[i] <- "Female"
      }else{gender[i] <- "Male"}
    }

我收到此错误:

  

if(ID [[i]] [7]&lt; = 4){:缺少值需要TRUE / FALSE

时出错

1 个答案:

答案 0 :(得分:1)

我们可以从每个列表中提取第7个元素,并使用ifelse

比较它的值
ifelse(sapply(ID, '[', 7) <= 4, "female", "male")

#[1] "female" "male"

数据

ID <- list(c(9,4,1,2,0,7,0,6,0,4,0,8,5), c(9,6,1,0,0,3,5,1,8,3,0,8,3))

如果值为NA,我们可以在ifelse

中使用附加条件处理它们
seventh_value = sapply(ID, '[', 7)
ifelse(seventh_value > 4 | is.na(seventh_value), "male", "female")

#[1] "male" "male"

数据

ID <- list(c(9,4,1,2,0,7,NA,6,0,4,0,8,5), c(9,6,1,0,0,3,5,1,8,3,0,8,3))