2014-04-18 1 views
0

재무 데이터를 사용하고 있으며, 주 데이터 프레임의 행 이름은 날짜입니다.R : 누락 된 값이있는 열을 데이터 프레임에 추가합니다.

> assets[1:3,1:5] 
      ALD SFN TCO KIM CTX 
2003-01-03 48.1 23.98 23.5 23 22.34 
2003-01-06 48.1 23.98 23.5 23 22.34 
2003-01-07 48.1 23.98 23.5 23 22.34 

내가 열 (여기에 내가 자산에 FOC의 $ 가까운 추가 할) 동일한 유형 인 dataframe에서을하지만, 일부 날짜가 누락 추가하고 싶습니다 :

> FOC[1:3,1:2] 
      Close Adj.Close 
2003-01-03 510  510 
2003-01-07 518  518 

누락 된 값 그렇게 할 수있는 좋은 방법은

> assets[1:3,1:6] 
      ALD SFN TCO KIM CTX FOC 
2003-01-03 48.1 23.98 23.5 23 22.34 510 
2003-01-06 48.1 23.98 23.5 23 22.34 NA 
2003-01-07 48.1 23.98 23.5 23 22.34 518 

있습니까 : 그것은처럼 보일 것이다, 그래서 그냥, NA의를해야 하는가? 나는

> rowtoadd <- list(ALD=18.1,...) 
> dataframe[nrow(dataframe) + 1, names(rowtoadd)] <- rowtoadd 

같은 것을 수행하여 행과 비슷한 뭔가를 관리하지만이 열을 위해 할 수 없습니다입니다.

답변

0

병합 메서드를 사용할 수 있습니다.

당신은 xts 시계열 개체를 사용하고 있다고 생각합니다. 이들은 행 이름을 자동으로 처리합니다. help(merge.xts)에서 병합이 발생하는 방식을 제어하는 ​​데 사용할 수있는 키워드 인수 에 있습니다. 기본값은 'outer'입니다. 예 :

dat = merge(assets[1:3,], FOC[,1:2], join='left') 
> dat 
      ALD SFN TCO KIM CTX Close Adj.Close 
2003-01-03 48.1 23.98 23.5 23 22.34 510  510 
2003-01-06 48.1 23.98 23.5 23 22.34 NA  NA 
2003-01-07 48.1 23.98 23.5 23 22.34 518  518 
+0

나는 그것이 OP가 찾고 있었던 것이라고 생각하지 않습니다. 문제는 행 이름이 여전히 무시된다는 것입니다. (내 대답에 마지막 코멘트를 참조하십시오) –

+0

방금 ​​내가 필요한 것을 찾았습니다 : dat <- merge (assets, FOC, by = "row.names", all.x = T)는 트릭을 수행합니다. NA를 얻기 위해 all.x = T를 사용할 수 있습니다. 도와 주셔서 감사합니다. – Lemko

+0

@Robert Krzyzanowski 고맙습니다. xts에 대한 병합이 행 이름 (날짜 여야 함)에서 작동한다는 점을 명확히하기 위해 응답을 업데이트했습니다. – slushy

0

그런 다음 cbind 제 그들을 채울 수 :

# Example data 
df <- data.frame(list(split(rep(c(48.1, 23.98, 23.5, 23, 22.34), each = 3), rep(1:5, each = 3)))) 
colnames(df) <- c('ALD', 'SFN', 'TCO', 'KIM', 'CTX') 
row.names(df) <- paste0('2003-01-0', c(3, 6, 7)) 
df <- df[order(as.POSIXct(row.names(df))), ] # This is important for cbind to work right 
FOC <- data.frame(Close = c(510, 518), Adj.Close = c(510, 518)) 
row.names(FOC) <- paste0('2003-01-0', c(3, 7)) 

# Fill in NAs 
FOC[setdiff(row.names(df), row.names(FOC)), ] <- NA 
df <- cbind(df, FOC[order(as.POSIXct(row.names(FOC))), 1]) 
colnames(df)[length(df)] <- 'FOC' 

결과 : cbind은 검사하지 않기 때문에 as.POSIXct(row.names(..))에 의해

  ALD SFN TCO KIM CTX FOC 
2003-01-03 48.1 23.98 23.5 23 22.34 510 
2003-01-06 48.1 23.98 23.5 23 22.34 NA 
2003-01-07 48.1 23.98 23.5 23 22.34 518 

정렬이 중요합니다. 그것이 없으면 우리는 얻을 것입니다

  ALD SFN TCO KIM CTX FOC 
2003-01-03 48.1 23.98 23.5 23 22.34 510 
2003-01-06 48.1 23.98 23.5 23 22.34 518 
2003-01-07 48.1 23.98 23.5 23 22.34 NA