2016-08-09 2 views
-1

R에서 병합 기능을 사용하려고합니다. 일부 데이터 프레임 D에 열 이름 (주식 이름) 목록이 있습니다. 다음 스톡 이름이 열에 저장되고 '다음 열의 해당 섹터 이름과 함께'다른 데이터 프레임 'Info'를 갖습니다. 이 섹터 이름을 D 행에 병합해야합니다.한 데이터 프레임의 열 이름과 다른 열의 열을 병합()

2 개 열에 병합하는 경우 merge()를 직접 사용하고 by.x와 by.y를 변경할 수 있으며 이머징 된 값이 추가 열로 표시됩니다. . 그러나 D에는 열 이름으로 병합 할 이름이 있으므로 본질적으로 추가 행을 추가하려고합니다. 다음 코드는 작동하지 않습니다.

P.S 나는 주변에서 검색 한 적이 있지만 아무도 정확히이 문제가 없습니다. 그들은 비슷한 것들을 가지고 있지만, 그 접근법은 이것에 대해 유효하지 않습니다. 당신의 설명에서

+0

문제를 나타내는 작은 재현 가능한 예를 추가하십시오. –

+1

왜 투표가 중단 되었습니까? 적어도 하나를 말하면, 미래에 그것을 고칠 수 있습니다. – MathsQuant525

+1

나는 왜 이것에 대한 아래 투표가 있는지 잘 모르겠습니다. 이 링크 [어떻게 좋은 R 재현 할 수있는 예제를 만들 수 있습니까?] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) –

답변

0

D

set.seed(1) 
D <- data.frame(matrix(runif(9), nc=3)) 
names(D) <- sample(LETTERS, 3) 

> D 
      B   F   E 
1 0.2655087 0.9082078 0.9446753 
2 0.3721239 0.2016819 0.6607978 
3 0.5728534 0.8983897 0.6291140 
이 예에서는

경우, B, F처럼 보이는, 그리고 E 증권 이름입니다. 아마도 info은 다음과 같습니다

info <- data.frame(NAME=LETTERS, sector=letters) 
> info 
    NAME sector 
1  A  a 
2  B  b 
3  C  c 
4  D  d 
5  E  e 
6  F  f 
7  G  g 
..snip.. 

아이디어는 다음 info에서 D에 벡터 rbind을 올바른 sector를 추출하는 것입니다. rbind은 첫 번째 및 두 번째 개체의 이름과 일치합니다.

merged <- rbind(D, sapply(names(D), function(x) info$sector[info$NAME==x])) 
> merged 
      B   F   E 
1 0.2655087 0.9082078 0.9446753 
2 0.3721239 0.2016819 0.6607978 
3 0.5728534 0.8983897 0.6291140 
4 2.0000000 6.0000000 5.0000000 

sector은 (a 계수 형이었던) 부동 소수점으로 변환하고있다. 병합 된 테이블이 좋은 보이게하려면

rbind(format(D), 
    as.character(
    sapply(names(D), function(x) info$sector[info$NAME==x]) 
) 
) 
      B   F   E 
1 0.2655087 0.9082078 0.9446753 
2 0.3721239 0.2016819 0.6607978 
3 0.5728534 0.8983897 0.6291140 
4   b   f   e 

을 할 수하지만 지금 당신의 번호는 또는 당신을 위해 유용하지 않을 수도 있습니다 문자, 정말.

관련 문제