2016-11-29 5 views
0

Ich habe folgende Datenrahmen uWie Werte in Datenrahmen Spalten basierend auf bestimmten Bedingungen

u<- data.frame(a=c("x1","x2","x3","x4","x5","x6","x7"),b=c(2005,2006,2007,2008,2009,2010,2011),c1=c(0.5,0.5,0.5,0.6,0.7,0.9,0.5),c2=c(0.5,0.5,0.5,0.6,0.7,0.9,0.5),c3=c(0.5,0.5,0.5,0.6,0.7,0.9,0.5)) 
a b  c1 c2 c3 
x1 2005 0.5 0.5 0.5 
x2 2006 0.5 0.5 0.5 
x3 2007 0.5 0.5 0.5 
x4 2008 0.6 0.6 0.6 
x5 2009 0.7 0.7 0.7 
x6 2010 0.9 0.9 0.9 
x7 2011 0.5 0.5 0.5 

Ich möchte ersetzen Werte in Spalte (c1, c2, c3) basierend auf Werten in Spalte b ersetzen. Also, wenn der Wert in der Spalte b kleiner als 2008 ersetzen Werte in Spalte (c1, c2, c3) auf 1,2 und 3. Die resultierende Datenrahmen ist

a b  c1 c2 c3 
x1 2005 1 2 3 
x2 2006 1 2 3 
x3 2007 1 2 3 
x4 2008 0.6 0.6 0.6 
x5 2009 0.7 0.7 0.7 
x6 2010 0.9 0.9 0.9 
x7 2011 0.5 0.5 0.5 
+2

Versuchen Sie 'u [which (u $ b <2008), 3: 5] <- rep (1: 3, jedes = 3)' – count

Antwort

1

Ohne Bibliotheken zu verwenden, oder Sie benötigen, falls dies c Spalten zu viele verallgemeinern, können Sie tun:

u <- data.frame(a=c("x1","x2","x3","x4","x5","x6","x7"), 
b=c(2005,2006,2007,2008,2009,2010,2011), 
c1=c(0.5,0.5,0.5,0.6,0.7,0.9,0.5), 
c2=c(0.5,0.5,0.5,0.6,0.7,0.9,0.5), 
c3=c(0.5,0.5,0.5,0.6,0.7,0.9,0.5)) 

Dann normale Klammern Schreibweise verwenden, der Teilmenge und weisen Sie die drei Spalten einmal an:

u[u$b<2008,3:5] <- data.frame(1,2,3) 
u 
    a b c1 c2 c3 
1 x1 2005 1.0 2.0 3.0 
2 x2 2006 1.0 2.0 3.0 
3 x3 2007 1.0 2.0 3.0 
4 x4 2008 0.6 0.6 0.6 
5 x5 2009 0.7 0.7 0.7 
6 x6 2010 0.9 0.9 0.9 
7 x7 2011 0.5 0.5 0.5 
0

Versuchen Sie, diese

library(magrittr)

u$c1 %<>% ifelse(u$b < 2008, 1, .)

u$c2 %<>% ifelse(u$b < 2008, 2, .)

u$c3 %<>% ifelse(u$b < 2008, 3, .)

0

Ich finde, dass dies intuitiver ist, aber nur eine Präferenz.

u$c1[u$b < 2008] <- 1 u$c2[u$b < 2008] <- 2 u$c3[u$b < 2008] <- 3

0

und eine andere Art und Weise ...

library(dplyr) 
u %>% 
    mutate(c1 = ifelse(b < 2008, 1, c1), 
     c2 = ifelse(b < 2008, 2, c2), 
     c3 = ifelse(b < 2008, 3, c3) 
     ) 
Verwandte Themen