Mit dplyr können Sie so etwas tun:
iris %>% head %>% mutate(sum=Sepal.Length + Sepal.Width)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species sum
1 5.1 3.5 1.4 0.2 setosa 8.6
2 4.9 3.0 1.4 0.2 setosa 7.9
3 4.7 3.2 1.3 0.2 setosa 7.9
4 4.6 3.1 1.5 0.2 setosa 7.7
5 5.0 3.6 1.4 0.2 setosa 8.6
6 5.4 3.9 1.7 0.4 setosa 9.3
Aber oben habe ich die Spalten anhand ihrer Spaltennamen referenziert. Wie kann ich mit 1
und 2
die Spaltenindizes verwenden, um dasselbe Ergebnis zu erzielen?
Hier habe ich Folgendes, aber ich finde, dass es nicht so elegant ist.
iris %>% head %>% mutate(sum=apply(select(.,1,2),1,sum))
Sepal.Length Sepal.Width Petal.Length Petal.Width Species sum
1 5.1 3.5 1.4 0.2 setosa 8.6
2 4.9 3.0 1.4 0.2 setosa 7.9
3 4.7 3.2 1.3 0.2 setosa 7.9
4 4.6 3.1 1.5 0.2 setosa 7.7
5 5.0 3.6 1.4 0.2 setosa 8.6
6 5.4 3.9 1.7 0.4 setosa 9.3
Du kannst es versuchen:
iris %>% head %>% mutate(sum = .[[1]] + .[[2]])
Sepal.Length Sepal.Width Petal.Length Petal.Width Species sum
1 5.1 3.5 1.4 0.2 setosa 8.6
2 4.9 3.0 1.4 0.2 setosa 7.9
3 4.7 3.2 1.3 0.2 setosa 7.9
4 4.6 3.1 1.5 0.2 setosa 7.7
5 5.0 3.6 1.4 0.2 setosa 8.6
6 5.4 3.9 1.7 0.4 setosa 9.3
Um das Problem zu lösen, das @pluke in den Kommentaren anspricht, unterstützt dplyr den Spaltenindex nicht wirklich.
Keine perfekte Lösung, aber Sie können die Basis R verwenden, um diesen Code zu umgehen
iris[1] <- iris[1] + iris[2]
Ich bin ein bisschen spät im Spiel, aber meine persönliche Strategie in solchen Fällen besteht darin, meine eigene tidyverse-kompatible Funktion zu schreiben, die genau das tut, was ich will. Mit tidyverse-konform meine ich, dass das erste Argument der Funktion ein Datenrahmen ist und dass die Ausgabe ein Vektor ist, der dem Datenrahmen hinzugefügt werden kann.
sum_cols <- function(x, col1, col2){
x[[col1]] + x[[col2]]
}
iris %>%
head %>%
mutate(sum = sum_cols(x = ., col1 = 1, col2 = 2))