2014-05-21 1 views
2

데이터 프레임 목록이 lsD이고 벡터 목록이 lsV입니다. 벡터의 길이는 데이터 프레임의 행 수와 동일합니다 (장난감 예 = 5).벡터 목록을 R에있는 데이터 프레임 목록과 병합

각 데이터 프레임에 추가 열로 벡터를 추가하고 싶습니다. 내가 루프 for 루프와 함께있어,하지만 내 일반적인 질문은 : for없이 이름으로 두 목록을 반복 할 수있는 방법은 무엇입니까? 이 작업을 수행하는 방법은 lapply입니까? 여기

장난감의 예입니다 내 솔루션은 for 루프를 사용하여 :

lsV <- list(x = sample(LETTERS[1:5], 5,replace=T), 
      y = sample(LETTERS[1:5], 5, replace=T), 
      z=sample(LETTERS[1:5], 5, replace=T)) 

lsD <- list(x = data.frame(matrix(sample(LETTERS[1:5], 20,replace=T), ncol=4)), 
     y = data.frame(matrix(sample(LETTERS[1:5], 20,replace=T), ncol=4)), 
     z = data.frame(matrix(sample(LETTERS[1:5], 20,replace=T), ncol=4))) 

for (i in 1:length(lsV)) {lsD[[i]]<-cbind(lsD[[i]], lsV[[i]])} 

어떤 아이디어? 나는 다음과 같이 노력했다. 그러나 물론 그것은 효과가 없었다. 감사!

lapply(names(lsD), function(X) {lsD$X<-cbind(lsD$X, lsV$X)}) 

답변

5

Map 기능은 여기에 유용 할 것이다

Map(cbind, lsD, Z=lsV) 

모두 Mapmapply 여러 매개 변수를 허용하고 동시에 반복 적용 - 스타일의 함수입니다. 당신은 '$'연산자와 변수 이름을 사용할 수 없기 때문에

lapply(names(lsD), function(X) {lsD$X<-cbind(lsD$X, lsV$X)}) 

그리고

이 작동하지 않습니다. 사용할 수 있습니다

lapply(names(lsD), function(X) {lsD[[X]]<-cbind(lsD[[X]], lsV[[X]])}) 
+0

안녕하세요 MrFlick! 고마워요, 그저 아름답습니다! 나는 이전에'Map'을 사용하지 않았지만, 정확히 내가 필요로하는 것을 수행하므로 더 많이 읽을 것입니다! 매우 감사드립니다! – reviewer3