1

次のようなデータを含むテーブルがあります。

treatment, species1, species2, ... 
A, 3, 4, ... 
B, 2, 5, ...

行ごとの種の数を計算し、新しい列として計算された数値をテーブルに追加して、次のようにします。

treatment, species1, species2, ... , number_of_species
A,         3,        4,        ... , 6
B,         2,        5,        ... , 9

私が何を目指しているのか理解していただければ幸いです。私はRが初めてなので、しばらく試してみましたがわかりませんでした。助けていただければ幸いです。

前もって感謝します、ピーター

4

2 に答える 2

4

このようなことを試してください。データに合わせて微調整が必​​要になる場合があります (質問にサンプル データを提供すると役立ちます) が、これでほとんどの場合は解決できるはずです。

# An easy way to make sample data
dat <- data.frame(treatment = letters[1:5],
                  species1 = c(3, 4, 0, 1, 3),
                  species2 = c(2, 1, 0, 0, 7),
                  species3 = c(0, 4, 0, 1, 0))

# First step: dat[ , -1] > 0 indicates which values are greater than zero
# You want to exclude the first column, since that just indicates 
# treatment group
dat[ , -1] > 0

# rowSums counts the number of values > 0 in each row - that's because, in R,
# you can add TRUE values to count them
rowSums(dat[ , -1] > 0)

# Finally, wrap it all up and add it to your data.frame
dat$number_of_species <- rowSums(dat[ , -1] > 0)
于 2013-06-13T18:24:53.640 に答える
0

テーブルの保存方法にもよりますが (これは の結果である場合は直接動作するはずですtableが、データ フレームまたはその他の構造である場合は微調整が必​​要になる場合があります)、次のように単純な場合もあります。

newtable <- addmargins(mytable, 1, FUN = function(x) sum( x > 0 ) )
于 2013-06-13T18:54:00.133 に答える