【问题标题】:If statement with nested subset function带有嵌套子集函数的 if 语句
【发布时间】:2017-01-31 00:34:14
【问题描述】:

我正在尝试使用其中的子集函数执行 if 语句。 我有一个数据框 dat1,例如这样:

     Unit   Cost    Date
     1        40    Sep
     1        50    Dec
     2        55    Sep
     2        30    Oct

并且基于它的行 nrow(dat1) 我想子集另一个数据帧 (dat2)

      unit  model   sales
      1      AAA    100
      1      BBB    110
      1      CCC    130
      4      ZZZ    120
      5      YYY    128

我写了一个这样的 if 语句:

     Sales <- ifelse(nrow(dat1)>=30, 
            dat2[which(dat2$unit==1 & dat2$model=="AAA"),], 
            dat2[which(dat2$unit==1),])

所以如果 nrow>30 我想在 dat2 的 2 个维度上应用子集,否则只在其中一个维度上应用。 然而,这给了我一个只有第一列的列表,而不是一个包含 dat2 的所有 3 列的数据框。 执行此操作的正确命令是什么? 提前感谢您的帮助。

【问题讨论】:

  • 使用ifelse。这不是ifelse 的用例。

标签: r list if-statement dataframe subset


【解决方案1】:

这行得通:

Sales <- dat2[which(dat2$unit==1),] # default
if (nrow(dat1)>=30) {
    Sales <-dat2[which(dat2$unit==1 & dat2$model=="AAA"),]
}

【讨论】:

    【解决方案2】:

    使用 if 后跟 else 语句进行数据子集化

    if(nrow(dat1)>=30){ 
    Sales <-   dat2[dat2$unit==1 & dat2$model=="AAA",]
    }else{
    Sales <-   dat2[dat2$unit==1,]}  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-08
      • 2017-01-13
      • 1970-01-01
      相关资源
      最近更新 更多