web-dev-qa-db-ja.com

Rの値がゼロの行を削除するにはどうすればよいですか?

Rの値がゼロの行を削除する方法を解決するのに問題があります。他の手では、na.omit()を使用してすべてのNA値を削除するか、complete.cases()を使用してNA値が含まれます。

Rの値がゼロの行を削除する方法を知っている人はいますか?

例えば ​​:

Before

|    DateTime      | Mac1  | Mac2  | Mac3  | Mac4  |
----------------------------------------------------
| 2011-04-02 06:00 | 20    | 0     | 20    | 20    |  
| 2011-04-02 06:05 | 21    | 21    | 21    | 21    |  
| 2011-04-02 06:10 | 22    | 22    | 22    | 22    |  
| 2011-04-02 06:15 | 23    | 23    | 0     | 23    |  
| 2011-04-02 06:20 | 24    | 24    | 24    | 24    | 
| 2011-04-02 06:25 | 0     | 25    | 25    | 0     | 

After

|    DateTime      | Mac1  | Mac2  | Mac3  | Mac4  |
----------------------------------------------------
| 2011-04-02 06:05 | 21    | 21    | 21    | 21    |  
| 2011-04-02 06:10 | 22    | 22    | 22    | 22    |  
| 2011-04-02 06:20 | 24    | 24    | 24    | 24    |  
27
YougyZ

これを行うにはいくつかの異なる方法があります。 applyを使用することを好みます。これは簡単に拡張できるからです。

##Generate some data
dd = data.frame(a = 1:4, b= 1:0, c=0:3)

##Go through each row and determine if a value is zero
row_sub = apply(dd, 1, function(row) all(row !=0 ))
##Subset as usual
dd[row_sub,]
33
csgillespie

0NAに交換してから、それらのソリューションのいずれかを使用できますが、違いのために、数値がそれより大きい場合、有限の対数しかありません。 0。したがって、rowSumslogは、行にゼロがない場合にのみ有限になります。

dfr[is.finite(rowSums(log(dfr[-1]))),]
7
James

おそらく、0をNAに置き換えてから、あなたが言及した組み込み関数を使用するというJoranの提案に行くでしょう。それができない/したくない場合、1つのアプローチはany()を使用して0を含む行を見つけ、それらをサブセット化することです。

set.seed(42)
#Fake data
x <- data.frame(a = sample(0:2, 5, TRUE), b = sample(0:2, 5, TRUE))
> x
  a b
1 2 1
2 2 2
3 0 0
4 2 1
5 1 2
#Subset out any rows with a 0 in them
#Note the negation with ! around the apply function
x[!(apply(x, 1, function(y) any(y == 0))),]
  a b
1 2 1
2 2 2
4 2 1
5 1 2

Joranのメソッドを実装するには、次のようなものから始める必要があります。

x[x==0] <- NA
6
Chase

Dplyrパッケージのフィルターを使用できます。

データフレームをdfと呼びましょう

library(dplyr) df1 <- filter(df, Mac1 > 0, Mac2 > 0, Mac3 > 0, Mac4 > 0)

df1には、ゼロより大きいエントリを持つ行のみが含まれます。お役に立てれば。

4
Vinay B

私は次のことをします。

ゼロをNAに設定します。

 data[data==0] <- NA
 data

NAに関連付けられている行を削除します。

 data2<-data[complete.cases(data),]
3
morteza

関数定義の必要性を前提として、csgillespieのメソッドを単純に適応させることを好みます。

d[apply(d!=0, 1, all),]

ここで、dはデータフレームです。

1
Robert Yi