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