【问题标题】:Contitional Statement to delete temperature above a certain degree [duplicate]删除温度高于一定程度的条件语句[重复]
【发布时间】:2017-06-21 18:31:27
【问题描述】:

我正在尝试编写一个条件语句,以删除所有高于 27 度的温度值。

我写了这行代码,但它不起作用:

for (i in 1:length(New_DF$Temperature)) {
  if(New_DF$Temperature[i] > 27) {
    New_DF$Temperature <- NA
  }
}

我想删除温度超过 27 度的整行。

谢谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    欢迎来到 Stack Overflow。如果你先对 SO 规范和 R 本身进行一些研究,你会发现你会得到更好的答案。这是基本的 R,在任何介绍性文本的第一章或第二章中都有介绍。

    例如,您的问题应该是可重现的:How to make a great R reproducible example?

    话虽如此,与其尝试编写循环来执行此操作,不如使用向量来选择您需要的项目,然后从 data.frame 中删除它们:

    selector <- New_DF$Temperature>27
    New_DF <- New_DF[ !selector, ]
    

    或者在一行中:

    New_DF[ !New_DF$Temperature>27, ] 
    

    【讨论】:

    • 感谢您的帮助,但这实际上会删除所有低于 27 的温度值,并在数据框中保留高于 27 的温度值。我该怎么做相反的事情?
    • 再次,只需阅读基本介绍。如果你去掉 NOT 运算符(!),它将反转。或将 > 翻转为 <.>
    • 没错,但它为什么不把温度低于 27 的数据给我潜水?
    【解决方案2】:

    更容易过滤您的数据集。不需要循环。

    library(dplyr)
    
    filtered_DF <- filter(New_DF, Temperature < 27)
    

    你也可以使用base R的子集

    filtered_DF <- subset(New_DF, Temperature < 27)
    

    【讨论】:

    • 当我运行您的代码行时,即使温度是数字,我也会得到 '
    • str(New_DF) 看看什么是类。让我知道结果是什么
    • 使用 class(New_DF$Temperature) 找出它是什么类。 str(New_DF) 是你最好的朋友,看看你所有的变量是什么类。无论出于何种原因,您的 df 都是因素。我不确定它是如何导入的。尝试 New_DF$Temperature
    • @MattW。您不会像那样将因子转换为数字 - as.numeric 返回 level 整数。使用as.numeric(as.character(somefactor))!
    • @Spacedman 这是真的!我使用 as.numeric(as.character()) 并且它有效。
    猜你喜欢
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多