Я просмотрел несколько форумов, пытаясь найти ответ, который мне подходит, но не повезло. Я, наверное, слишком обдумываю это, но что-то помогает!
У меня есть фрейм данных о процентном покрытии растительности по ряду участков (участки, перечисленные в столбцах с каждым видом в строке). Я хотел бы создать новый столбец, который подсчитывает количество сайтов, в которых присутствовал каждый вид. Например, на скольких сайтах процентное покрытие Salix превышает 0?
Вот небольшой кадр данных для работать сейчас ... (сайты и виды - это имена столбцов и строк соответственно)
site1 site2 site3 site4
Salix 16.50 7.00 7.50 6.00
Betula 17.75 19.75 0.00 5.25
Alnus 0.00 0.00 0.00 0.00
Picea 0.00 0.35 0.00 0.00
Я бы хотел, чтобы последний столбец выглядел следующим образом:
site1 site2 site3 site4 count
Salix 16.50 7.00 7.50 6.00 4
Betula 17.75 19.75 0.00 5.25 3
Alnus 0.00 0.00 0.00 0.00 0
Picea 0.00 0.35 0.00 0.00 1
Я получил функцию подсчета для работы по одной строке за раз, но у меня возникают проблемы с автоматизацией этого для всего фрейма данных (намного больше, чем тот, который я показываю здесь).
sum(df[1, ] > 0)
[1] 4
sum(df[2, ] > 0)
[1] 3
Я попытался для l oop вот так:
#First I created an empty column
df$count <- NA
#Then I tried to populate that column
for(i in 1:nrow(df)){
df$count <- sum(df[i, 1:ncol(df) - 1] > 0)
Error in df$count[i, ] <- sum(df[i, 1:ncol(df) - 1] > 0) :
incorrect number of subscripts on matrix
Я также кратко попытался поработать с функцией apply:
df$count <- lapply(df, MARGIN = 1, FUN = function(x) sum(x > 0))
Error in FUN(X[[i]], ...) : unused argument (MARGIN = 1)
Когда я пытаюсь удалить аргумент MARGIN, я получаю сообщение об ошибке, которое сбивает с толку столбцы со строками (эта ошибка связана с моими фактическими данными, которые составляют 79 столбцов на 38 строк):
Error in `$<-.data.frame`(`*tmp*`, sites, value = list(`site1` = 15L, :
replacement has 79 rows, data has 38
Любое руководство?