2017-01-09 8 views
0

는이 같은 작은 데이터 프레임이 있습니다R : 열의 문자열을 조건으로 두 번째 열로 대체하려면 어떻게합니까?

a<-c("green","green","green","green","green","green","green","green","green","green") 
b<-c("blue","red","blue","red","blue","red","blue","red","blue","red") 
df<-data.frame(a,b) 
df 
     a b 
1 green blue 
2 green red 
3 green blue 
4 green red 
5 green blue 
6 green red 
7 green blue 
8 green red 
9 green blue 
10 green red 

을 나는 "노란색"여기서 B == "빨간색"

내가 df[b=="red",] 이러한 행을 선택할 수 있습니다하여 "녹색"을 대체하고 싶습니다 그러나 교체가 작동하지 않습니다. 나는 시도 :

> df[b=="red",]$a<-gsub("green","yellow",df[b=="red",]) 
Fehler in `$<-.data.frame`(`*tmp*`, "a", value = c("c(1, 1, 1, 1, 1)", : 
    replacement has 2 rows, data has 5 

또는

> df$a[subset(df$a,df$b=="red")]<-"yellow" 
Warnmeldung: 
In `[<-.factor`(`*tmp*`, subset(df$a, df$b == "red"), value = c(NA, : 
    invalid factor level, NA generated 
> df 
     a b 
1 <NA> blue 
2 green red 
3 green blue 
4 green red 
5 green blue 
6 green red 
7 green blue 
8 green red 
9 green blue 
10 green red 

> df[b=="red",]$a<-"yellow" 
Warnmeldung: 
In `[<-.factor`(`*tmp*`, iseq, value = c("yellow", "yellow", "yellow", : 
    invalid factor level, NA generated 
> df 
     a b 
1 green blue 
2 <NA> red 
3 green blue 
4 <NA> red 
5 green blue 
6 <NA> red 
7 green blue 
8 <NA> red 
9 green blue 
10 <NA> red 

이 중에 내 문제에 대해 제대로 작동하지합니다. 가장 간단한 해결책은 무엇입니까? 많은 감사, Treppenlift.

+2

'df <- data.frame (a, b, stringsAsFactors = FALSE);을 시도하십시오. df [df $ b == 'red', 1] <- 'yellow ''. 문제는'R'은'data.frame'을 호출 할 때'stringsAsFactors = TRUE'를 디폴트로 설정한다는 것입니다. – bouncyball

+0

당신은 또한 2 가지 조건이 필요합니다 :'df $ b == "red"'와'df $ a == "green"'데이터에 그런 경우를 넣습니다. –

+0

@bouncyball이 솔루션은 잘 동작합니다. 고마워요 – treppenlift

답변

0

어떤 기능을 사용할 수 있습니다. 일부 예는 http://www.endmemo.com/program/R/which.php을 참조하십시오.

df[which(df[,2]=="red"),1] <- "yellow" 
+0

''는'실제로 여기에 필요하지 않습니다. 함수를 제거하면 잘 작동합니다 :'df [df [, 2] == 'red',]' – bouncyball

+0

맞아요, 그게 더 빠릅니다. – Christov