【问题标题】:Easier way to create vector from condition从条件创建向量的更简单方法
【发布时间】:2019-01-26 22:52:19
【问题描述】:

我想根据两个条件从一个现有向量(在数据集中)创建多个向量

现在我有一个数据集 (DCE_unformat),其中包含一个向量“包装”,它有 4 个级别:“容器”、“托盘”、“容器和托盘”或“其他”。现在我想根据向量DCE_unformat$Packaging 基于 2 个条件创建 3 个向量: 第一个向量:== 1 如果DCE_unformat$Packaging == "container" 的值,== -1 如果包装的值== "other"0 否则 第 2 和第 3 个向量相同,但与其他 2 种包装类型不同。

现在我编写了一个 for 循环,其中包含一个嵌套的 if 语句,用于执行这项工作的每个条件,但对于未来的任务,我想知道这是否可以更方便地完成。

DCE_unformat <- read.csv2(paste(getwd(),"/Data/data.csv",sep=""), header = TRUE)

DCE_unformat$P1 <- rep(0,4000)
DCE_unformat$P2 <- rep(0,4000)
DCE_unformat$P3 <- rep(0,4000)

for (i in 1:4000) {
    if(DCE_unformat$Packaging[i] == "pallet") {
    DCE_unformat$P1[i] <- 1
  } else if (DCE_unformat$Packaging[i] == "container") {
    DCE_unformat$P2[i] <- 1
  } else if (DCE_unformat$Packaging[i] == "container en pallet") {
    DCE_unformat$P3[i] <- 1
  } else if (DCE_unformat$Packaging[i] == "other") {
    DCE_unformat$P1[i] <- -1
    DCE_unformat$P2[i] <- -1
    DCE_unformat$P3[i] <- -1
  }
}

【问题讨论】:

标签: r


【解决方案1】:

你可以用矢量化的方式做到这一点。

DCE_unformat$P1 <- as.integer(DCE_unformat$Packaging == "pallet")
DCE_unformat$P2 <- as.integer(DCE_unformat$Packaging == "container")
DCE_unformat$P3 <- as.integer(DCE_unformat$Packaging == "container en pallet")
i <- DCE_unformat$Packaging == "other"
DCE_unformat$P1[i] <- -1
DCE_unformat$P2[i] <- -1
DCE_unformat$P3[i] <- -1

【讨论】:

    猜你喜欢
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多