2017-02-02 6 views
0

현재 한 번에 하나가 아니라 한 번에 캐스팅 명령을 실행하려는 16 개의 데이터 프레임이 있습니다. lapply를 사용하여 성공적으로 수행 할 수 있습니다 (아래 코드 참조). 그러나 데이터는 목록의 목록에 쓰여지므로 별도의 데이터 프레임으로 유지해야합니다. (이것은 대부분 비효율적하지만 데이터를 네트워크 분석의 여러 가지를 할 필요가 별도의 그들을 유지하려는) prolist 내가 기능을 적용 할 다양한 dataframes의 이름이 포함 된 경우새로운 데이터 프레임을 만들기 위해 lapply, invisible 및 다른 데이터 프레임에 캐스팅 사용

require(dplyr) 
require(readr) 
require(data.table) 
library(reshape) 

lapply(prolist,function(x) cast(x, mgrname ~ ticker, fun.aggregate = sum ,value = "shares")) 

에.

비슷한 상황에서 보이지 않는 코드를 찾아서 사용했는데 별도의 데이터 프레임이 생성되었지만 이번에는 작동하지 않습니다. 내 코드는 : 캐스팅 기능에 주목하는 것은 변형 된 패키지에서 비롯된 것입니다.

invisible(lapply(prolist,function(x) cast(x, mgrname ~ ticker, fun.aggregate = sum ,value = "shares") 
     { assign(paste0("summary", x), x, pos=.GlobalEnv) })) 

오류 :

Error: unexpected '{' in: 

"보이지 않는 (lapply (prolist 함수 (x)는 캐스팅 (X, mgrname ~ 시세, fun.aggregate = 합계 값 ="주 ") { "

파일 형식.이 년의 각 분기에 대한 파일 인과 같은가는

| mgrname | ticker | share | 
|---------|--------|-------| 
| Man A | AAPL |  20| 
| Man A | MSFT |  30| 
| Man A | TLSA |  40| 
| Man B | AAPL |  20| 
| Man B | MSFT |  10| 
| Man B | TLSA |  50| 
| Man C | AAPL |  20| 
| Man C | MSFT |  20| 
| Man C | TLSA |  80| 

어떤 도움이라면 언제나처럼 크게 감사 할 것입니다.

+0

이 시도 : 보이지 않는'(lapply (prolist, 기능 (X) {캐스트 (X, mgrname ~ 시세, fun.aggregate = 합계 값 = "주"); (paste0 ("요약"할당 x), x, pos = .GlobalEnv)}))' – Sathish

+1

'{}'을 함수 본문의 시작과 끝에 넣고 명령문 사이에'세미콜론 -;'을 넣으십시오. – Sathish

+0

'cast'는 어떤 패키지입니까? 기본이 아니라면'library' 행을 모두 포함하십시오. 또한 * 목록의 * 형식은 어떤 형식입니까? 목록 요소를 데이터 프레임에 바인딩 할 수 있습니다. 데이터로 설명하십시오. – Parfait

답변

0
# sample data 
df1 <- structure(list(mgrname = c("Man A", "Man A", "Man A", "Man B", "Man B", "Man B", "Man C", "Man C", "Man C"), 
         ticker = c("AAPL", "MSFT", "TLSA", "AAPL", "MSFT", "TLSA", "AAPL", "MSFT", "TLSA"), 
         share = c(20L, 30L, 40L, 20L, 10L, 50L, 20L, 20L, 80L)), 
       .Names = c("mgrname", "ticker", "share"), 
       row.names = c(NA, -9L), 
       class = "data.frame") 


# create a sample list with the df1 
prolist <- list(df1, df1, df1, df1) 

# assign names to the list of data frames 
names(prolist) <- LETTERS[1:4] 
names(prolist) 
# [1] "A" "B" "C" "D" 

# load data table library, so we can use dcast() function from it. It is the same function in reshape2 package, but works well with large data 
library('data.table') 
invisible(lapply(names(prolist), 
        function(y) assign(x  = y, # paste0('summary', y) 
             value = dcast(prolist[[y]], mgrname ~ ticker, fun.aggregate = sum, value.var = 'share'), 
             envir =.GlobalEnv))) 

ls() 
# [1] "A"  "B"  "C"  "D"  "df1"  "prolist" 

A 
# mgrname AAPL MSFT TLSA 
# 1 Man A 20 30 40 
# 2 Man B 20 10 50 
# 3 Man C 20 20 80 
B 
# mgrname AAPL MSFT TLSA 
# 1 Man A 20 30 40 
# 2 Man B 20 10 50 
# 3 Man C 20 20 80 
C 
# mgrname AAPL MSFT TLSA 
# 1 Man A 20 30 40 
# 2 Man B 20 10 50 
# 3 Man C 20 20 80 
D 
# mgrname AAPL MSFT TLSA 
# 1 Man A 20 30 40 
# 2 Man B 20 10 50 
# 3 Man C 20 20 80