Gibt es eine Funktion oder eine Art und Weise rowSums
zu bekommen nur eine Spalte zu arbeiten?
Beispieldaten
col1 <- c(1,2,3)
col2 <- c(1,2,3)
df <- data.frame(col1, col2)
I rowSums
können jeden Wert in einer Reihe für zwei oder mehrere definierte Spalten zusammenzufassen:
colsToAdd <- c("col1", "col2")
rowSums(df[,colsToAdd])
[1] 2 4 6
schlägt jedoch fehl, dies, wenn nur auf Säule geleitet wird
colsToAdd <- c("col1")
rowSums(df[,colsToAdd])
Error in rowSums(df[, colsToAdd]) :
'x' must be an array of at least two dimensions
welche ma kes Sinn, wenn an der rowSums()
Funktion suchen:
> 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
Zusätzliche Informationen
Die Spalten werden von einem Benutzer in einer glänzenden App und gespeichert in einer Variablen ausgewählt werden. Diese Variable wird dann an rowSums
übergeben. Der Benutzer kann eine oder mehrere Spalten auswählen.
Ich könnte eine ifelse
-Anweisung erstellen, um die Länge der Variablen zu überprüfen, aber fragte mich, ob es eine bessere/elegantere/einzeilige Lösung gibt, die ich nicht sehe?
gezwungen. Verwenden Sie drop = FALSE. dh. 'rowSums (df [, colsToAdd, drop = FALSE])' – akrun
Sie können 'Reduce' auch verwenden, wenn Sie' NA's nicht in Ihren Daten haben, wie zum Beispiel 'Reduce (" + ", df [, colsToAdd]) 'sollte so schnell sein (wenn nicht schneller). Obwohl @akrun es definitiv geschafft hat. –
Boom - 'drop = FALSE'. Danke @akrun. Willst du es eine Antwort geben? – tospig