2013-08-07 3 views
1

나는 apply 함수로 심하게 흔들 렸습니다. 단일 문자 값 목록을 가지고 있으며 모음에 대한 첫 번째 언급을 반환하고자합니다.R :: 새 열로 행에서 변수의 첫 번째 발생을 표시합니다.

a<- c("A","B","C","E") 
b<- c("O","T","D","J") 
c<- c("A","R","B","K") 
d<- c("F","L","O","U") 
e<- c("N","D","S","Z") 

df <- data.frame(a,b,c,d,e) 

그 행에 대한 모음의 첫 번째 인스턴스를 반환하는 새 열을 만들고 싶습니다.

vow <- c("A","E","I","O","U") 

결과는 (A, NA?, O, E)가됩니다. 값이없는 경우 어떻게 처리합니까?

답변

1

글자가 없으면 경고 메시지가 표시됩니다. 당신은 이것을 잡으려고 함수를 정교화 할 수 있습니다.

1), 각 행에 일치를 적용합니다 (인덱스의 테이블을 얻을 전치)

2) 각 열에서 최초의 비 NA를 가져옵니다! 세 단계에서

apply(df, 1, function(x, vow) x[min(which(x %in% vow))], vow = vow) 
[1] "A" NA "O" "E" 
+0

정말 간단합니다. 나는이 예를 많이 확장 할 것이고, 결국 맹세 = 서약의 의미는 무엇인가? –

+0

이것은 익명 함수에 인수를 명시 적으로 전달하는 것입니다. –

0
> m <- apply(df, 1, match, table=vow) 
> 
> i <- apply(m, 2, function(x) na.omit(x)[1]) 
> 
> vow[i] 
[1] "A" NA "O" "E" 

3) 맹세 색인을 참조하십시오.

+0

이것은 정말 흥미롭고 유용 할 것입니다. 나는 때로는 두 번째 가치가 필요하며 이것들을 얻는 완벽한 방법이다. 감사! –

+0

그런 다음 na.omit (x) [1]을 [2]로 변경하십시오. –

+0

또한 적용 방법을 보여 주셔서 감사합니다. –

관련 문제