所以它有一个 csv 我正在读入一个 R 数据帧,它看起来像这样
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 的每一行。
在此先感谢您的帮助
您最有效的方法是使用 的na.strings
参数将所有值read.csv()
编码为,然后删除不完整的情况。-1
NA
na.strings=-1
第1 步:设置read.csv()
:
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.cases
or na.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
直接方式:
df <- df[!apply(df, 1, function(x) {any(x == -1)}),]
更新:如果 data.frame 包含字符列,则此方法将失败,因为apply
隐式将 data.frame 转换为矩阵(仅包含一种类型的数据)并且字符类型优先于数字类型,因此 data.frame 将转换为字符矩阵。
或将 -1 替换为NA
然后使用na.omit
:
df[df==-1] <- NA
df <- na.omit(df)
这些应该工作,我没有检查。请始终尝试提供可重现的示例来说明您的问题。