2014-09-15 2 views
0

25 개의 다른 변수 (밤에 다른 시간 지점)를 결합하여 새 변수를 만들려고합니다. 예를 들어 다음과 같은 다섯 가지 시점이 있습니다.많은 열을 사용하여 새 변수 만들기

net_8pm net_830pm net_9pm net_930pm net_10pm net_1030pm 
1  0   0  0   1  1   1 
2  0   0  0   0  0   0 
3  0   0  0   0  0   0 
4  0   0  1   1  1   1 
5  1   0  0   0  0   0 
6  0   1  1   1  1   1 

내 데이터에있는 열은 34:58입니다. 그들이 지난 밤에 그물을 사용했다면 값 = 1, 그렇지 않으면 값 = 0입니다. 누락 된 데이터 포인트가 있으며 "NA"로 코딩되어 있습니다. 나는 newvar = 1을 ANY의 시간 지점 = 1로 만들고, 0이 아닌 경우 0으로 만들고 싶습니다.

나는 길고 끔찍한 ifelse 문자열을 시험해 보았는데, 이것은 추한 것이며 모든 행 (나는 182 명을 가지고 있으며, ifelse 문자열을 실행할 때만 160 개를 얻는다)을 집어 들지 않는 것 같습니다. 나 자신의 기능과 루프를 만드는 것은 끔찍한 일이다. 그래서 내가 시도한 모든 것은 흉상이었다. 내가 하나가 지칠대로 지친 얻을 - 내가하려고하는 일의 90 %

collapse_ifelse<-function(x){ 
+ ifelse(x==1, "yes", 
+ ifelse(x==0, "no", 
+ NA)) 
+ } 
> df$net_ever<-apply(df, 2, FUN=collapse_ifelse) 

아니면이 경고를 얻을 : 4450 행으로

for (i in colnames(df)[38:54]){ 
+ df$net_ever<- ifelse(i==1, 1, 
+ ifelse(i==0, 0, 
+ NA)) 
+ } 
> table(df$net_ever) 
< table of extent 0 > 

하거나 회전을

> f1<-function(x){ 
+ for (i in 1:x) 
+ ifelse(x==1, "yes", 
+ ifelse(x==0, "no", 
+ NA)) 
+ } 
> df$net_ever<-apply(df, 2, FUN=f1) 
There were 26 warnings (use warnings() to see them) 
> warnings() 
Warning messages: 
1: In 1:x : numerical expression has 182 elements: only the first used 

또는 나는 182의를 얻는다 :

> df$net_ever2<-rep(0,182) 
> for (i in 1:182){ 
+ ifelse(i==1, "yes", 
+ ifelse(i==0, "no", 
+ NA)) 
+ } 
> table(df$net_ever) 

    0 
182 

당신은 I ha를 볼 수있다. 내가 여기서 뭘하고 있는지 전혀 모르겠다. (도움을 위해 이들을 게시하는 것만으로도 당혹 스럽지만 필사적 인 시간에는 필사적 인 조치가 필요하다.) 이러한 변수를 축소하는 방법에 대한 도움을 크게 주시면 감사하겠습니다. Windows 7에서 R 3.0.3을 사용하고 있습니다. 감사합니다!

답변

3

은 행에 의해 any 적용 :

df$net_ever <- apply(df[38:54], 1, any) 
+0

당신은 인수'na.rm = T' 단지 결과 Vector가의 NA가 없습니다 있는지 확인하기를 추가 할 수 있습니다. – abel

+0

그래서 ... 간단합니다 ... 정말 고마워요! 이것은 내가 필요한 것입니다! – ericotta

관련 문제