2011-11-03 1 views
1

가정하자 I는이 같은 date.frame :(적용에 data.frame 칼럼 이름을 전달) 또는 plyr 기능에 의해 선택된 열에서의 값을 대체

df <- data.frame(a=1:5, b=sample(1:5, 5, replace=TRUE), c=5:1) 
df 
    a b c 
1 1 4 5 
2 2 3 4 
3 3 5 3 
4 4 2 2 
5 5 1 1 

및 I 모두 5NA로 바꿔야 열 b & cdf로 돌아 :

df 
    a b c 
1 1 4 NA 
2 2 3 4 
3 3 NA 3 
4 4 2 2 
5 5 1 1 

하지만,198를 사용하는 대신 일반 apply() 기능을 수행 할 왜냐하면 실제로 많은 변수가 실제 데이터에서 대체되어야하기 때문입니다.

var <- c("b", "c") 

과 같은 것을 생각해 : 나는 변수 목록을 정의한 가정

df <- within(df, sapply(var, function(x) x <- replace(x, x==5, NA))) 

하지만 아무 일도 일어나지 않습니다. data.frame에서 열 이름의 변수 목록을 일반 apply/plyr 함수 (또는 다른 완전히 다른 방법)로 전달하여 위와 비슷한 방법으로이 작업을 수행 할 수있는 방법이 있는지 생각했습니다. 감사합니다 ~

답변

6
df <- data.frame(a=1:5, b=sample(1:5, 5, replace=TRUE), c=5:1) 
df 
var <- c("b","c") 
df[,var] <- sapply(df[,var],function(x) ifelse(x==5,NA,x)) 
df 

여기서 ifelse 표기법을 더 쉽게 이해할 수 있지만 대부분의 Rers는 대신 색인을 사용합니다.

+0

우수함 할 수 있습니다. 분명히 나는 ​​많은 방식으로 그것을 얻었다. 감사! – Rock

+0

그리고'lapply'를 사용하는 것이 더 낫습니다 - 여기서 단순화 할 필요가 없습니다. – hadley

5

당신은

df[,var][df[,var] == 5] <- NA 
+0

그것은 나를 위해 일했습니다. 고마워요. – PatrickT

관련 문제