【问题标题】:In R - Write an output csv file based on a condition在 R 中 - 根据条件编写输出 csv 文件
【发布时间】:2017-10-16 05:17:32
【问题描述】:

我是 R 新手。 我正在写一个程序 (a) 正在读取输入文件 (.csv) – 该文件有 3 列(均为数字) (b) 基于第 3 列的条件(例如,第 3 列的值 > 100),正在将新记录添加到输出文件中。 我在编写“if”子句时遇到了问题。

当我写作时

 if (as.numeric(fld 3) > 100)
         {
         x <- data.frame(computed fld1, computed fld 2, computed fld3)
         write.table(x, "outputfile.csv", sep=",",append=TRUE,  quote=FALSE, 
 col.names=FALSE, row.names=FALSE)
    }

然后出现如下错误信息:

Error in if (as.numeric(fld3) > 99.99) { : 
  missing value where TRUE/FALSE needed

接下来我尝试了以下

cond <- as.numeric(x_compare) > 99.99

但我不清楚 - 如何捕获“cond”的“TRUE”值,以便可以将新记录写入输出文件。

欢迎任何关于如何构建这部分程序的建议。

【问题讨论】:

  • 请您输入()您的数据集

标签: r


【解决方案1】:

您需要在数据集中检查NAs。

as.numeric(NA)NA。而NA &gt; 99 也是NA

根据 R 文档:

用法
if(cond) expr

cond
非 NA 的长度为 1 的逻辑向量。长度大于的条件 目前接受一个警告,但只使用第一个元素。 而是在环境变量时发出错误信号 _R_CHECK_LENGTH_1_CONDITION_ 设置为真。其他类型被强制为逻辑 如果可能,忽略任何类。

所以cond 不能是NA

【讨论】:

    【解决方案2】:

    这是一个带有虚拟数据集的示例:

    set.seed(4)
    df <- data.frame(v1=sample(1:100, 20, replace=T),
                     v2=sample(1:100, 20, replace=T),
                     v3=sample(80:150, 20, replace=T))
    
    output <- split(df, df$v3>100)[[2]]
    write.csv(output, "outputfile.csv")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-12
      相关资源
      最近更新 更多