2016-08-05 3 views
0

데이터 프레임이 있습니다. 나는 열 "A"를 검색해야하고, "a"는 "foo는"열 "B"를 일치 한 동일한 경우Apply 함수의 오류 : "인수의 행 수가 다르다는 것을 의미합니다. 1, 0"

a <- c("foo", "bar", "baz", "foo") 
b <- c(0, 0, 0, 0) 
df <- data.frame(a, b) 

f <- function (x){ 
    if (x["a"] == "foo"){ 
    x["b"] <- "confirm" 
    } 
} 

result <- apply(df, 1, f) 

의도 된 결과가

a  b 
"foo" "confirm" 
"bar" 0 
"baz" 0 
"foo" "confirm" 

는 "발견"하지만 난 할 때 이, 반환 결과 :

[[1]] 
[1] "confirm" 

[[2]] 
NULL 

[[3]] 
NULL 

[[4]] 
[1] "confirm" 

및보기 (결과) 오류 제공 :보기 오류 : 인수가 행 수 서로 다른 의미 : 1, 0

데이터 프레임에 다른 차원을 추가합니까?

+0

함수가 마지막에'리턴 (X)'에 필요 : – Frank

+0

'return (x)'를 추가했지만 그 결과로 행과 열이 바뀝니다. –

+0

네, 그건'apply'를 사용했을 때의 부작용입니다. 사람들은 대개 반대쪽 끝에't()'를 쓰거나'apply' 사용을 피하려고합니다. – Frank

답변

0

당신은 할 수있는이 당신이 당신의 자신의 함수를 작성 (프랭크는 자신의 의견에 말했듯이)가 return 문이 있는지 확인하려면 쉽게 dplyr

library(dplyr) 
a <- c("foo", "bar", "baz", "foo") 
b <- c(0, 0, 0, 0) 
df <- data.frame(a, b) 

result <- df %>% 
    mutate(b = ifelse(a == "foo", "confirm", b)) 

# a  b 
# 1 foo confirm 
# 2 bar  0 
# 3 baz  0 
# 4 foo confirm 

에서 ifelsemutate 명령을 사용하여.

result <- data.frame(a, b=(ifelse(a=="foo","found",b)))

0

는 기본 패키지를 사용합니다.
관련 문제