14

R には次のようなデータがあります。

 Cnty   Yr   Plt       Spp  DBH Ht Age
 1  185 1999 20001 Bitternut  8.0 54  47
 2  185 1999 20001 Bitternut  7.2 55  50
 3   31 1999 20001    Pignut  7.4 71  60
 4   31 1999 20001    Pignut 11.4 85 114
 5  189 1999 20001        WO 14.5 80  82
 6  189 1999 20001        WO 12.1 72  79

各郡 (Cnty) の固有種 (Spp) の量を知りたいです。「unique(dfname$Spp)」は、データ フレーム内の固有種の総数を示しますが、郡ごとに表示したいと思います。

どんな助けでも大歓迎です!奇妙なフォーマットで申し訳ありませんが、これはSOに関する初めての質問です。

ありがとう。

4

7 に答える 7

0

data.tableアプローチを使用した簡単なソリューション。

library(data.table)

output <- setDT(mydf)[ , .(count=.N) , by = .(Spp,Cnty)]

出力をより適切なテーブル形式に変更したい場合:

library(tidyr)

spread(data=a, key =Spp, count)

#   Cnty Bitternut Pignut WO
# 1:  185         2      2  1
# 2:  189         1      1 NA
# 3:   31        NA      1  2

# or perhaps like this:

spread(data=a, key =Cnty, count)

#          Spp 185 189 31
# 1: Bitternut   2   1 NA
# 2:    Pignut   2   1  1
# 3:        WO   1  NA  2
于 2016-06-01T21:18:59.233 に答える
0

A Handcart And Mohair が言及した内容に追加したいと思います。以下のコードの結果をデータ フレームに取得したい場合 (R スタジオで役立ちます)...

with(mydf, table(Spp, Cnty))
#            Cnty
# Spp         185 189 31
#   Bitternut   2   1  0
#   Pignut      2   1  1
#   WO          1   0  2
ftable(mydf, row.vars="Spp", col.vars=c("Cnty", "Yr"))
#           Cnty  185       189        31     
#           Yr   1999 2000 1999 2000 1999 2000
# Spp                                         
# Bitternut         1    1    0    1    0    0
# Pignut            2    0    0    1    0    1
# WO                0    1    0    0    2    0

次のように、コードの前に as.data.frame.matrix 修飾子を配置する必要があります。

as.data.frame.matrix(with(mydf, table(Spp, Cnty)))

この投稿にたどり着いたとき、私は R にかなり慣れていませんでした。それを理解するのに長い時間がかかったので、共有したいと思いました。

于 2016-04-04T16:13:40.887 に答える
0
with(mydf, tapply(Spp, list(Cnty, Yr), 
     FUN = function(x) length(unique(x))))

一意のクエリは、1000k 行を超えるデータを意味する大規模なデータ セットでは機能しません。

于 2014-07-13T21:32:41.837 に答える
-1

これを簡単にするために集計機能を使用できるようになりました。

tally(group_by(mydf, Spp, Cnty))

        Spp   Cnty     n
     <fctr> <fctr> <int>
1 Bitternut    185     2
2 Bitternut    189     1
3    Pignut    185     2
4    Pignut    189     1
5    Pignut     31     1
6        WO    185     1
7        WO     31     2
于 2017-04-04T17:15:34.183 に答える