【问题标题】:R remove rows containing a certain valueR删除包含某个值的行
【发布时间】:2012-11-07 09:50:22
【问题描述】:

所以它有一个我正在读入 R 数据帧的 csv,它看起来像这样

clientx,clienty,screenx,screeny
481,855,481,847
481,784,481,847
481,784,481,847
879,292,879,355

第一行当然是标题。所以我们有 4 列,其中包含数字数据,范围从 1 到 4 位。集合中没有负数,除了 -1 表示缺失值。 我想删除 4 列中任何包含 -1 的每一行。

提前感谢您的帮助

【问题讨论】:

标签: r dataframe


【解决方案1】:

您最有效的方法是使用read.csv()na.strings 参数将所有-1 值编码为NA,然后删除不完整的案例。


第一步:read.csv()中设置na.strings=-1

x <- read.csv(text="
clientx,clienty,screenx,screeny
481,855,481,847
481,784,481,847
481,784,481,847
-1,292,879,355", header=TRUE, na.strings=-1)

x
clientx clienty screenx screeny
1     481     855     481     847
2     481     784     481     847
3     481     784     481     847
4      NA     292     879     355

第 2 步:现在使用complete.casesna.omit

x[complete.cases(x), ]
  clientx clienty screenx screeny
1     481     855     481     847
2     481     784     481     847
3     481     784     481     847

na.omit(x)
  clientx clienty screenx screeny
1     481     855     481     847
2     481     784     481     847
3     481     784     481     847

【讨论】:

    【解决方案2】:

    直接方式:

    df <- df[!apply(df, 1, function(x) {any(x == -1)}),]
    

    更新:如果 data.frame 包含字符列,此方法将失败,因为apply 隐式将 data.frame 转换为矩阵(仅包含一种类型的数据)并且字符类型优先于数字类型,因此 data.frame 将转换成字符矩阵。

    或者用NA替换-1,然后使用na.omit

    df[df==-1] <- NA
    df <- na.omit(df)
    

    这些应该可以,我没有检查。请始终尝试提供可重现的示例来说明您的问题。

    【讨论】:

      猜你喜欢
      • 2014-11-23
      • 1970-01-01
      • 2012-10-12
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多