2017-02-24 6 views
-1

私はデータフレームdata.2016を持っていて、 "DIPL"(ゼロを除く)が出現する頻度を探しています。 "DIPL"はワームの数です寄生虫は魚に見られる。頻度を見つけて4つのカテゴリに分けるときにゼロを除外する方法

data.2016 

Site DIPL 
1  0 
1  1 
1  1 
2  6 
2  8 
2  1 
2  1 
3  0 
3  0 
3  0 
4  1258 
4  501 

が、私はこのように見えるように出力したい:

Site freq 
1  2 
2  4 
3  0 
4  2 

このことから、私が解釈することができ、サイト#1で見つかった3魚のうち(

データは次のようになりますデータフレームから)、そのうち2つはワームの寄生虫であった。

私は

aggregate(DIPL~Site, data=data.2016, frequency) #and get: 
    Site DIPL 
1 1 1 
2 2 1 
3 3 1 
4 4 1 

DIPL列から虫と魚の数をカウントする方法があり、サイトごと(列の値を意味するが、ゼロよりも大きい)です

を試してみましたか?

答えて

2

ゼロを削除するカスタム関数を使用してください。

aggregate(DIPL ~ Site, data.2016, function(x) length(x[x != 0])) # or sum(x != 0) 
# Site DIPL 
# 1 1 2 
# 2 2 4 
# 3 3 0 
# 4 4 2 

別のオプションは、一時的に、その後DIPL列を変換するだけの和を取ることであろう。

aggregate(DIPL ~ Site, transform(data.2016, DIPL = DIPL != 0), sum) 
# Site DIPL 
# 1 1 2 
# 2 2 4 
# 3 3 0 
# 4 4 2 

xtabs()frequencyは、時系列データで使用するためのものです、ちなみにあまりにも...

xtabs(DIPL ~ Site, transform(data.2016, DIPL = DIPL != 0)) 
# Site 
# 1 2 3 4 
# 2 4 0 2 

楽しいです。

データ:

data.2016 <- structure(list(Site = c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 
4L, 4L), DIPL = c(0L, 1L, 1L, 6L, 8L, 1L, 1L, 0L, 0L, 0L, 1258L, 
501L)), .Names = c("Site", "DIPL"), class = "data.frame", row.names = c(NA, 
-12L)) 
0

多分これはあなたが探しているものですか?

# first some fake data 
site <- c("A","A","A","B","B","B") 
numworms <- c(1,0,3,0,0,42) 
data.frame(site,numworms) 
    site numworms 
1 A  1 
2 A  0 
3 A  3 
4 B  0 
5 B  0 
6 B  42 

tapply(numworms, site, function(x) sum(x>0)) 
A B 
2 1 
+0

ああ、あなたのデータと、 'と(data.2016、tapply(DIPL、サイト、機能(x)の合計(X> 0)))のようなもの' –

関連する問題