Это расстраивает, так как кажется, что это должно быть так просто, но это отнимает часы.
Я хочу получить суммы строк для списка столбцов в фрейме данных, но этот список, заданный пользователем, вполне может иметь длину 1, то есть один номер столбца.
rowSums
не позволяет суммировать 1 столбец.
rowsum
использует группу, которую я нашел совершенно неразборчивой. Я играл с этим примером целую вечность и до сих пор понятия не имею, для чего он нужен, но его нельзя опустить.
В верхнем ответе здесь используются rowSums
или apply
; во втором используются .SD
и lapply
, но используются :=
и .SD
и другие термины, которых нет в справке R и которых я раньше не видел, что просто открывает еще одну червоточину поиска и путаницы.
Итак: есть ли что-нибудь, что я могу использовать для:
x <- matrix(runif(100), ncol = 5)
goodcols <- c(1,3,5)
y <- rowSums(x[,goodcols])
это будет работать с 1 или> 1 хорошими столбцами?
Заранее спасибо. В настоящее время я рассматриваю использование:
ifelse(length(goodcols)>1,
y<-rowSums(x[,goodcols]),
y<-x[,goodcols])
drop=FALSE
, чтобы избежать преобразования x в вектор, когда есть только один столбец..SD
и:=
— это синтаксис пакетаdata.table
. И последнее, поставьтеy <- rowSums(x[,goodcols])
вместоy <- rowSums[,goodcols]
, это должно работать лучше ;-) (так что вам нужноy <- rowSums(x[, goodcols, drop=F])
) - person Cath   schedule 01.09.2015