Каждая строка в моем наборе данных представляет собой другое дерево. Сюжет относится к области отбора проб (из которых около 700), вид - это вид дерева, а другие столбцы - это то, присутствует ли дерево (1) или отсутствует (NA). Ниже приведен минимальный пример набора данныхЧисло различных значений для одного столбца в списке разделов
Plot Species 1983 1988 2003 2008 2013
1 11 1 1 1 1 1
1 11 1 1 1 1 NA
1 21 NA 1 1 1 1
2 11 1 1 1 NA NA
2 34 1 1 1 1 1
3 15 1 1 1 1 NA
3 15 NA 1 1 1 NA
3 11 1 1 1 1 NA
В основном то, что я хочу знать, сколько разных видов есть в каждом участке, каждый год, не включая значения NA:
Plot 1983 1988 2003 2008 2013
1 1 2 2 2 2
2 2 2 2 1 1
3 2 2 2 2 0
Мои текущая стратегия следующим образом - изменить все значения 1 в их число видов, так что набор данных выглядит, как показано ниже
Plot Species 1983 1988 2003 2008 2013
1 11 11 11 11 11 11
1 11 11 11 11 11 NA
1 21 NA 21 21 21 21
2 11 11 11 11 NA NA
2 34 34 34 34 34 34
3 15 15 15 15 15 NA
3 15 NA 15 15 15 NA
3 11 11 11 11 11 NA
, а затем разделить набор данных в соответствии с номером участка, используя
split(data, as.factor(data$Plot))
Я думаю, что я по существу хочу, чтобы длина каждого столбца определялась, сколько разных значений есть, но colSums не учитывает разные графики. Я не уверен, как использовать функции apply, когда у меня есть список разделов.
Любые предложения приветствуются! Благодаря
Я думаю, что 'rowsum (DF [- (1: 2)], группа = DF $ много, na.rm = TRUE)' будет это делать, хотя это не вполне соответствуют вашим суммам. Например, третий элемент 1988 года - это 3, а не 2. – lmo
@Imo, который, похоже, работает в основном, однако кажется, что добавление фактических значений, а не количество различных значений. Третий элемент 1988 года должен быть 2, так как есть два разных вида (15 и 11) – isabelnt
@ Хенрик вы правы! извиниться за ошибку там, отредактировать это – isabelnt