2016-06-17 5 views
1

는 여러 개의 데이터 프레임에 새 열을 추가 한 다음 새로운 원래 데이터 프레임을 대체하려합니다. 새 데이터 프레임을 만드는 방법은 다음과 같습니다.목록을 분할하고 개별적으로 개체를 저장하는 방법은 무엇입니까?

df1 <- data.frame(X1=c(1,2,3),X2=c(1,2,3)) 
df2 <- data.frame(X1=c(4,5,6),X2=c(4,5,6)) 

groups <- list(df1,df2) 
groups <- lapply(groups,function(x) cbind(x,X3=x[,1]+x[,2])) 
groups 

[[1]] 
    X1 X2 X3 
1 1 1 2 
2 2 2 4 
3 3 3 6 

[[2]] 
    X1 X2 X3 
1 4 4 8 
2 5 5 10 
3 6 6 12 

새 데이터 프레임이 어떻게 생성되었는지는 만족 스럽습니다. 그때 나는 내 groups 목록을 파괴하고 다시 각각의 원래 데이터 프레임으로 목록 요소를 절약에 붙어 무엇.

원하는 출력

는 기본적으로, 나는 df1,df2 <- groups[[1]],groups[[2]] 같은 것을하고 싶어하지만하지 물론 syntatically 유효합니다. 2 개 이상의 데이터 프레임을 가지고 있기 때문에 단순히 N 줄의 코드를 입력하는 것보다 더 많은 프로그래밍 방식이 필요합니다.

+2

유지 data.frames은 일반적으로 R에서 꽤 좋은 생각이다. 유용한 팁의 번호 [이 질문] (http://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames)에 그레고르의 답변을 참조하십시오. - C ("DF1", "DF2")''이름 (그룹) <: 당신은 또한 접근하기가 쉽도록 목록 항목에 이름을 추가 할 수 있습니다. – lmo

+0

감사합니다. 매우 유익한 내용입니다. 나는 그 접근법을 구현하려고 노력할 것이다. 나는 여전히 원래의 질문에 대해 궁금해한다. – ZachTurn

답변

3
for (i in 1:length(groups)){ 
    assign(paste("df",i,sep=""),as.data.frame(groups[[i]])) 
} 

해야합니다. 시험해보십시오.

+0

닫기. { 할당 (paste0 ("DF", I) as.data.frame (그룹 [I])) }' –

+0

덕분에, 그것을 보정 : 그것은 대 (길이 (군) I 1) '이어야 – Rockbar

+0

감사합니다, 내 게시물은 내 자신의 답변을 안내하는 데 도움이되었습니다. 데이터 프레임에 순차적으로 번호가 매겨지면 솔루션이 작동하지만 이름 지정 규칙에서 작동하는 대답을 게시합니다. – ZachTurn

1

@Rockbar뿐만 아니라 일반적인 솔루션를 알려준 :

for(i in 1:length(groups)){ 
    assign(names(groups)[i],as.data.frame(groups[[i]])) 
} 

> df1 
    X1 X2 X3 
1 1 1 2 
2 2 2 4 
3 3 3 6 
> df2 
    x1 X3 X3 
1 4 4 8 
2 5 5 10 
3 6 6 12 

난이 단지 작품 목록에있는 개체가 모두 명명하는 경우주의해야한다. 이걸 안내 해주신 Rockbar에게 다시 한번 감사드립니다. 당신은`사용할 수 있습니다 lapply` 및 기타 도구가 그들과 함께 작업하기로 목록에있는 동일한 구조와

관련 문제