DomandarowSums su una colonna
C'è una funzione o un modo per ottenere rowSums
a lavorare su una sola colonna?
Esempio Dati
col1 <- c(1,2,3)
col2 <- c(1,2,3)
df <- data.frame(col1, col2)
posso usare rowSums
riassumere ciascun valore in una fila per due o più colonne definite:
colsToAdd <- c("col1", "col2")
rowSums(df[,colsToAdd])
[1] 2 4 6
Tuttavia, ciò non riesce quando solo su colonna viene passata
colsToAdd <- c("col1")
rowSums(df[,colsToAdd])
Error in rowSums(df[, colsToAdd]) :
'x' must be an array of at least two dimensions
quale ma KES senso quando guardando la funzione rowSums()
:
> rowSums
function (x, na.rm = FALSE, dims = 1L)
{
if (is.data.frame(x))
x <- as.matrix(x)
if (!is.array(x) || length(dn <- dim(x)) < 2L)
## This line 'stops' the function if only one column is passed
informazioni aggiuntive
Le colonne saranno selezionati da un utente in un'applicazione Shiny e memorizzati in una variabile. Questa variabile viene quindi passata a rowSums
. L'utente può selezionare una o più colonne.
Potrei costruire un'istruzione ifelse
per controllare la lunghezza della variabile, ma mi chiedevo se c'è una soluzione migliore/più elegante/a linea singola che non vedo?
Utilizzare drop = FALSE. vale a dire. 'rowSums (df [, colsToAdd, drop = FALSE])' – akrun
Puoi anche usare 'Riduci 'se non hai' NA's nei tuoi dati, come 'Riduci (" + ", df [, colsToAdd]) 'che dovrebbe essere il più veloce (se non più veloce). Anche se @akrun l'ha sicuramente inchiodato. –
boom - 'drop = FALSE'. Grazie @akrun. Vuoi farne una risposta? – tospig