2017-10-06 2 views
1

저는 R 및 XTS에 상당히 익숙합니다. 혼동스러운 제목을 용서하십시오, 아래의 예는 내 질문을 더 잘 설명해야합니다. 질문 인 How to get value by column name in R?은 XTS 객체로 작업하고 있기 때문에 많은 도움이되지 못했습니다.새로운 XTS 열은 열 이름의 열에있는 열 이름을 기반으로합니다.

XTS 개체의 다른 열 이름 인 문자열 열이 있습니다.

xts_bars <- structure(c("1", "1", "1", "1", "-1", "-1", "-1", "-1", "action4", 
"action4", "action", "action"), .indexCLASS = c("POSIXct", "POSIXt"), 
tclass = c("POSIXct", "POSIXt"), tzone = "", class = c("xts", "zoo"), 
index = c(1506620100, 1506620400, 1506620700, 1506621000), .Dim = c(4L, 3L), 
.Dimnames = list(NULL, c("action", "action4", "column_names"))) 

새 열을 만들고 각 행의 명명 된 열 값을 각 열에 채우고 싶습니다.

xts_bars$column_names 
xts_bars$new_column = xts_bars[,xts_bars$column_names] 

IT는 'NEW_COLUMN'열 전에 3 여분의 열을 만드는 것, 작동하지 않는 :는 'NEW_COLUMN'열은 -1, -1, 1을 포함해야

    action action4 column_names action4.1 action4.2 action.1 new_column 
2017-09-28 12:35:00 "1" "-1" "action4" "-1"  "-1"  "1"  "1"  
2017-09-28 12:40:00 "1" "-1" "action4" "-1"  "-1"  "1"  "1"  
2017-09-28 12:45:00 "1" "-1" "action"  "-1"  "-1"  "1"  "1"  
2017-09-28 12:50:00 "1" "-1" "action"  "-1"  "-1"  "1"  "1" 

1.

+0

"사진은 수천 단어의 가치가 있습니다."라고 때로는 언급되지만 이는 데이터 사진에는 적용되지 않습니다. [재현 가능한 예] (https://stackoverflow.com/q/5963269/271616)를 제공해주십시오. 귀하의 사진은 xts 객체가 아닙니다. xts 객체에는 유형을 혼합 할 수 없으며 xts 객체에는 "날짜"열이 없습니다. –

+0

@JoshuaUlrich "Date"열은 IBrokers 패키지의 XTS 개체를 write.zoo() 할 때 CSV 파일에서 가져온 것입니다. XTS 객체에서 유형을 혼합하지 않는다는 것에 관해서는 RSTudio에서 문자열 열을 추가 할 때 NA 강제 변환 경고가 표시되었지만 두 번째 행을 XTS 객체로 강제 실행했지만 클래스 뒤에도 xts/zoo를 계속 표시했습니다. (xts_bars). – sshemtov

답변

0

가장 먼저 떠오르는 것은 매트릭스를 사용하여 객체를 부분 집합으로 만드는 것입니다. 현재 matrix subsetting on xts objects을 수행 할 수 없지만 coredata()을 사용하여 기본 행렬을 추출 할 수 있습니다.

먼저 xts 개체의 하위 집합에 사용할 행렬을 만들어야합니다. 각 행에는 두 개의 열이 필요합니다. 첫 번째 열은 추출 할 요소의 행 번호이고 두 번째 열은 추출 할 요소의 열 번호입니다. 각 행을 추출 된 벡터에서 원하는 요소 쌍인 i, j 쌍으로 생각할 수 있습니다.

열 이름으로 추출하려면 각 이름에 해당하는 열 번호를 찾아야합니다. match() 기능으로이를 수행 할 수 있습니다. 행 번호는 단순히 1:nrow(xts_bars)입니다.

# Find the value in xts_bar$column_names in colnames(xts_bars) 
col_nums <- match(xts_bars$column_names, colnames(xts_bars)) 
# Create subset matrix 
subset_matrix <- cbind(1:nrow(xts_bars), col_nums) 

이제 subset_matrix를 사용하여 객체 당신의 XTS 서브 세트를해야합니다. 현재로서는 가능하지 않으므로 coredata()을 사용하여 기본 행렬을 추출한 다음 그 행렬을 부분 집합으로 사용할 수 있습니다.

# Create new column 
xts_bars$new_column <- coredata(xts_bars)[subset_matrix] 
xts_bars 
#      action action4 column_names new_column 
# 2017-09-28 12:35:00 "1" "-1" "action4" "-1"  
# 2017-09-28 12:40:00 "1" "-1" "action4" "-1"  
# 2017-09-28 12:45:00 "1" "-1" "action"  "1"  
# 2017-09-28 12:50:00 "1" "-1" "action"  "1" 
+0

은 샘플 데이터보다 더 많은 열에서 완벽하게 작동했습니다. 또한 내 질문을 편집 해 주셔서 감사합니다. 앞으로의 질문에 도움이됩니다. 나는 Up-voting 당신의 해답을 찾았으므로, 나는 새로 입었으므로 등록하지 않았다. 아마 다른 누군가가 나를 위해 그것을 투표 할 수 있습니다. 감사! – sshemtov

+0

@sshemtov : 도움이 되니 기쁩니다! 재현 가능한 예제에 대한 제 요청에 적극적으로 답변 해 주셔서 감사합니다. 그것은 당신을 도우려는 것이 훨씬 쉬워졌습니다. 귀하가 상향 투표를하지 못할 수도 있지만 체크 표시를 클릭하여 내 대답을 수락 할 수 있습니다. 그러면 다른 사람들이 귀하의 질문에 만족한다고 대답하게됩니다. –

+0

그냥 대답을 확인 표시를 보지 못 했어, 다시 고마워! – sshemtov

관련 문제