조건

2017-02-13 2 views
0
ab<- as.factor(c("A","B","A","C","B","C","C")) 
a123<- as.factor(c(NA,NA,NA,465,NA,532,456)) 
dd<- as.data.frame(cbind(ab,a123)) 

로의 NA를 장착이 코드 다음 I는 시도 나, 나는 열 AB의 값이 다른 NA 인 경우, NA는 0 값 바꾸려가 데이터 프레임 = 1조건

입니다

dd$Amount[is.Na(dd$Amount)]<- ifelse(my_dd$Activity=="Beneficiary Added", 0,1) 

내가 오류 다음 얻을 :

> dd$Amount[is.Na(dd$Amount)]<- ifelse(my_dd$Activity=="Beneficiary Added", 0, 1) 
Error in `*tmp*`$Amount : object of type 'closure' is not subsettable 
+0

그냥 할'DF <- 데이터입니다. 프레임을 (abc, a123)'as.data.frame (cbind'는'factor' 컬럼을 모두 생성합니다. – akrun

+0

**이 코드를 df로 만들 때 ** as.factor'를 사용하지 않으면'df $ a123 [ is.na (df $ a123)] <- ifelse (df [is.na (df $ a123), 'abc'] == "A", 0,1)'df와 잘 어울립니다. –

답변

0

답변 플러스 data.table (내 의견에 훨씬 명확 구문)을 예로 나의 코멘트 :

library(data.table) 

df <- data.frame(abc = c("A","B","A","C","B","C","C"), a123 = c(NA,NA,NA,465,NA,532,456)) 
dt <- data.table(df) 

# "Classic" data.frame syntax 
df$a123[is.na(df$a123)] <- ifelse(df[is.na(df$a123), 'abc'] == "A", 0, 1) 
# data.table one 
dt[is.na(a123), a123 := ifelse(abc == "A", 0, 1)] 
0

것은 여기 내 제안이다.

abc<- c("A","B","A","C","B","C","C") 
df<- data.frame(cbind(abc,a123),stringsAsFactors =FALSE) 
df$your_var=ifelse(df$abc %in% "A" & df$a123 %in% NA, 0, ifelse(df$a123 %in% NA,1,df$a123) 
print(df) 

최저

파블로

+0

문제를 해결해 주셔서 감사합니다. –

+0

@GirishKhole,이 답변이 약간 복잡하다고 생각하지 않습니까? –

+0

당신은 잘합니다. 실제로 그것은 맛의 문제입니다. 내 솔루션에서는 "ifelse"와 하위 집합의 조합을 사용합니다. – Pavlo