所以它有一个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的每一行.
在此先感谢您的帮助
您最有效的方法是使用na.strings参数来read.csv()将所有-1值编码为NA,然后删除不完整的案例.
第1步:设置na.strings=-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
Run Code Online (Sandbox Code Playgroud)
第2步:现在使用complete.cases或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
Run Code Online (Sandbox Code Playgroud)
直接方式:
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)
这些应该工作,我没有检查.请始终尝试提供可重现的示例来说明您的问题.
| 归档时间: |
|
| 查看次数: |
19066 次 |
| 最近记录: |