2016-12-11 3 views
0

저는 R 멍청 해요! 하나의 데이터 프레임을 메타 데이터로 사용하여 다른 데이터 프레임에 열을 만들려고합니다. 적용을 사용하지만 열이 만들어지지 않습니다. 아이디어?In R 다른 데이터 프레임에서 열 추가

> meta <- data.frame(colname = c("a","b","c")) 
> frm <- data.frame(z=c(1,2,3)) 
> frm["y"] <- 1 
> colnames(frm) 
[1] "z" "y" 
> apply(meta, 1, function(x) { 
+ frm[x["colname"]] <- 1 
+ }) 
[1] 1 1 1 
> colnames(frm) #hoping for a/b/c columns now 
[1] "z" "y" 

UPDATE를 : 출력

meta <- data.frame(colname = c("a","b","c")) 
frm <- data.frame(z=c(1,2,3)) 
frm["y"] <- 1 
colnames(frm) 
apply(meta, 1, function(x) { 
    frm[x["colname"]] <- 1 
}) 
colnames(frm) #hoping for a/b/c columns now 

여기 않음 발견하여 적용 how to access global/outer scope variable from R apply function?

다루지 변수에 액세스하는 데 필요한이 < < -

meta <- data.frame(colname = c("a","b","c")) 
frm <- data.frame(z=c(1,2,3)) 
frm["y"] <- 1 
colnames(frm) 
apply(meta, 1, function(x) { 
    frm[x["colname"]] <<- 1 #DBL ARROW DID IT 
}) 
colnames(frm) #hoping for a/b/c columns now 

답변

1

'메타'의는 factor 클래스입니다, 그래서 우리는 character이 변환하고 우리가 '메타'이름

을 통해 루프에 필요한 경우 'FRM'

frm[as.character(meta[[1]])] <- 1 
head(frm,2) 
# z y a b c 
#1 1 1 1 1 1 
#2 2 1 1 1 1 

에 새 열을 생성하는 것을 사용할 필요가

for(cn in as.character(meta$colname)) frm[[cn]] <- 1 
+0

고맙습니다 @akrun. 나는 그것을 시도했지만 나는 여전히 컬럼을 얻지 못하고있다/b/c. 이걸 실행하면 a/b/c 열이 보입니까? – sisdog

+0

@sisdog 이상합니다. 나는 a, b, c 란을 얻는다. 게시물을 업데이트했습니다. – akrun

+1

내 생각에 문제였던 apply()가 범위 지정되었습니다. 도움말에 다시 한 번 감사드립니다. – sisdog

관련 문제