2017-08-16 2 views
1

Meine Daten unterSpeichern Sie die Ergebnisse der Anwendung Funktion in neuer Spalte

A<-c(1999,1999, 2001, 2001) 
B<-c("A", "D", "A", "D") 
df<-data.frame (A, B) 

I

beantragen
df$C<-apply(df[1], 2, function(x) ifelse(x > 2000, 2000, x)) 

eine neue Spalte mit Werten Spalt auf der Basis einer Referenz

Output

erstellen
 A B C 
1 1999 A 1999 
2 1999 D 1999 
3 2001 A 2000 
4 2001 D 2000 

Warum ich? t repliziert den gleichen Spaltennamen A und erstellt keine Spalte C?

+3

Warum Sie für eine einzelne Spalte müssen 'apply' Sie umgewandelt werden, tun Sie einfach' df $ C <- df [, 1]; df [, 3] [df [, 1]> 2000] <- 2000' – akrun

+0

'df $ C <- pmin (df $ A, 2000)' – jogo

Antwort

2

Wir brauchen nicht eine apply Schleife für eine einzelne Spalte, kann es mit

df$C <- ifelse(df[,1] > 2000, 2000, df[,1]) 

In dem Code des OP durchgeführt wird, ist die Ausgabe ein matrix mit einer einzigen Spalte und es auch haben die gleichen Spaltennamen in einer matrix Spalt mit dimnames als 'A' resultierenden

str(df) 
#'data.frame': 4 obs. of 3 variables: 
#$ A: num 1999 1999 2001 2001 
#$ B: Factor w/ 2 levels "A","D": 1 2 1 2 
#$ C: num [1:4, 1] 1999 1999 2000 2000 
# ..- attr(*, "dimnames")=List of 2 
# .. ..$ : NULL 
# .. ..$ : chr "A" 

so ist die Spalte schon da, aber es ist ein matrix

df$C 
#  A 
#[1,] 1999 
#[2,] 1999 
#[3,] 2000 
#[4,] 2000 

Statt eine matrix zuzuweisen, sollte es zu einem vector

df$C <- as.vector(apply(df[1], 2, function(x) ifelse(x > 2000, 2000, x))) 
df$C 
#[1] 1999 1999 2000 2000 
Verwandte Themen