R删除包含特定值的行

dee*_*mel 3 r dataframe

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

clientx,clienty,screenx,screeny
481,855,481,847
481,784,481,847
481,784,481,847
879,292,879,355
Run Code Online (Sandbox Code Playgroud)

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

在此先感谢您的帮助

And*_*rie 9

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


第1步:设置na.strings=-1read.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
Run Code Online (Sandbox Code Playgroud)

第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
Run Code Online (Sandbox Code Playgroud)


DrD*_*Dom 8

直接方式:

df <- df[!apply(df, 1, function(x) {any(x == -1)}),]
Run Code Online (Sandbox Code Playgroud)

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

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

df[df==-1] <- NA
df <- na.omit(df)
Run Code Online (Sandbox Code Playgroud)

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