Похоже, у вас есть дубликаты на то, на что вы пытаетесь рассчитывать. Вы можете просто получить уникальный набор данных, на которые вы пытаетесь рассчитывать, и вы сможете получить желаемые результаты.
> df <- data.frame(polygon_id = replicate(10,'OW-M7'),
transect = replicate(10,1),
pin_number = c(1,1,1,2,3,4,5,6,7,8),
native_non_native =c(replicate(5,'Native'),replicate(5,'NoNative'))
)
> df
polygon_id transect pin_number native_non_native
1 OW-M7 1 1 Native
2 OW-M7 1 1 Native
3 OW-M7 1 1 Native
4 OW-M7 1 2 Native
5 OW-M7 1 3 Native
6 OW-M7 1 4 NoNative
7 OW-M7 1 5 NoNative
8 OW-M7 1 6 NoNative
9 OW-M7 1 7 NoNative
> mynewtable <- df %>% select(polygon_id, transect, pin_number, native_non_native) %>% distinct() %>% count(polygon_id, transect, native_non_native) %>% spread(native_non_native, n)
> mynewtable
# A tibble: 1 x 4
polygon_id transect Native NoNative
<fct> <dbl> <int> <int>
1 OW-M7 1 3 5
И, конечно, если это единственные столбцы, которые есть в вашем фрейме данных, вы можете просто проигнорировать шаг выбора и просто использовать различные
> mynewtable <- distinct(df) %>% count(polygon_id, transect, native_non_native) %>% spread(native_non_native, n)