Ich habe einen Datenrahmen (df), einen Vektor von Spaltennamen (foo) und eine Funktion (Leerzeichen), die einen Wert für alle Zeilen in einer angegebenen Spalte eines DF berechnet . Ich versuche, die Folgendes zu erreichen:R: Fehler: Unerwartetes '=' in
- Privat foo als Eingang zu den Räumen für jedes Element von foo einen Spaltennamen in df
- Spaces arbeitet
- für jede Spalte Räumen arbeitet auf passende, speichern Sie die Ausgabe von Leerzeichen in einer neuen Spalte von df mit einem Spaltennamen, der durch Verketten des Namens der ursprünglichen Spalte und ".counts" erzeugt wird.
Ich halte empfangen Fehler:
> Error: unexpected '=' in:
>" new[i] <- paste0(foo[i],".count") # New variable name
> data <- transform(data, new[i] ="
> }
> Error: unexpected '}' in " }"
Unten ist mein Code. Anmerkung: spaces macht was ich will, wenn es eine Eingabe einer einzelnen Variablen der Form df $ x liefert, aber die Verwendung von transform() sollte es mir ermöglichen, auf das Präfix df $ für jede Variable zu verzichten.
# Create data for example
a <- c <- seq(1:5)
b <- c("1","1 2", "1 2 3","1 2 3 4","1 2 3 4 5")
d <- 10
df <- data.frame(a,b,c,d) # data fram df
foo <- c("a","b") # these are the names of the columns I want to provide to spaces
# Define function: spaces
spaces <- function(s) { sapply(gregexpr(" ", s), function(p) { sum(p>=0) }) }
# Initialize vector with new variable names
new <- vector(length = length(foo))
# Create loop with following steps:
# (1) New variable name
# (2) Each element (e.g. "x") of foo is fed to spaces
# a new variable (e.g. "x.count") is created in df,
# this new df overwrites the old df
for (i in 1:length(foo)) {
new[i] <- paste0(foo[i],".count") # New variable name
df <- transform(df, new[i] = spaces(foo[i])) # Function and new df
}
Dies erzeugt eine neue Spalte mit dem Namen „tmp“, aber (1) Ich möchte, dass jeder neue Spalte einen anderen Namen haben wie folgt: für alte Spalte x, sollten neue Spalte x.counts, dh c (x sein, ".zählungen"). (2) Die Spalte erzeugt eine Reihe von Nullen. Ich habe das Beispiel bearbeitet, indem ich b in einen Vektor geändert habe, der am Ende Werte ungleich Null erzeugen sollte. – user3614648
@ user3614648 das ist einfach. Verwenden Sie eine der Funktionen zum Verketten von Zeichenfolgen. Ich habe 'paste0' verwendet. –