2017-04-09 12 views
1

저는 data.table을 처음 사용하고 있습니다. 나는 그것을 배우려고 노력 중이며 data.frame에서 data.table로 이동하려고합니다.data.table의 열을 분할 할 때 문자 벡터의 R 객체를 열 이름으로 사용하는 방법은 무엇입니까?

이제 텍스트를 새 열로 나누려고하고 토론 here을 따르고 있습니다.

이것은 내가하려는 일입니다.

# sample data frame 
test <- data.table(POS = c(254, 280, 303, 22, 105, 173, 230, 235, 257, 258), 
       value = c("0/1:15:3:123:12:478:-38.8484,0,-6.94934", 
         "0/0:15:15:577:0:0:0,-4.51545,-52.25", 
         "0/0:13:13:276:0:0:0,-3.91339,-25.0455", 
         "0/0:367:347:13643:0:0:0,-104.457,-1226.73", 
         "0/0:367:344:13145:5,0,1,0:168,0,41,0:0,-89.9158,-1166.99,-103.554,-1168.49,-1182.1,-100.161,-1165.11,-1178.71,-1178.41,-103.554,-1168.49,-1182.1,-1178.71,-1182.1", 
         "0/1:344:180:5411:156:4394:-294.227,0,-385.695", 
         "0/0:352:349:12289:1:12:0,-104.28,-1104.15", 
         "0/0:352:345:10691:1:12:0,-103.081,-960.583", 
         "0/0:352:351:13162:1:41:0,-101.868,-1179.6", 
         "0/0:352:349:12593:0:0:0,-105.059,-1132.45")) 

I 사용 상이한 값 열로 분할 원 ":"특정 컬럼 이름을

은 예시적인 데이터이다. 아래 코드 (위의 링크에서 배웠습니다)는 완벽하게 하나의 코드입니다.

test[, c("GT", "DP", "RO", "QR", "AO", "QA", "GL") := tstrsplit(value, ":", 
fixed=TRUE)] 

그러나 위의 c (이름) 대신 R 개체를 사용할 수 있습니까? 이처럼 :

# use the namesForm as column names 
test[, namesForm := tstrsplit(value, ":", fixed=TRUE)] 

이 날 경고하고 다른 출력이 (나에게 3 개 변수 data.table을 제공합니다 제공합니다, 마지막의 목록을 : 다음

# new column names 
namesForm <- c("GT", "DP", "RO", "QR", "AO", "QA", "GL") 

, namesForm 다음과 같은 것을 사용 (10)는 tstrsplit 출력에서 ​​7 목록의 재활용)

Warning message: 
In `[.data.table`(test, , `:=`(namesForm, tstrsplit(value, ":", : 
Supplied 7 items to be assigned to 10 items of column 'namesForm' (recycled leaving remainder of 3 items). 

그래서 다시는 내 질문은, 그것이 명시 적 C() 대신에 R 객체/변수를 사용하는 것이 가능하다 했습니까?

+1

사용'(namesForm) : ='대신'namesForm의 ='. – A5C1D2H2I1M1N2O1R2T1

답변

2

namesForm := 대신 (namesForm) :=을 사용할 수 있습니다.

예 :

test2 <- copy(test) 
namesForm <- c("GT", "DP", "RO", "QR", "AO", "QA", "GL") 

str(test[, c("GT", "DP", "RO", "QR", "AO", "QA", "GL") := tstrsplit(value, ":", fixed=TRUE)]) 
# Classes ‘data.table’ and 'data.frame': 10 obs. of 9 variables: 
# $ POS : num 254 280 303 22 105 173 230 235 257 258 
# $ value: chr "0/1:15:3:123:12:478:-38.8484,0,-6.94934" "0/0:15:15:577:0:0:0,-4.51545,-52.25" "0/0:13:13:276:0:0:0,-3.91339,-25.0455" "0/0:367:347:13643:0:0:0,-104.457,-1226.73" ... 
# $ GT : chr "0/1" "0/0" "0/0" "0/0" ... 
# $ DP : chr "15" "15" "13" "367" ... 
# $ RO : chr "3" "15" "13" "347" ... 
# $ QR : chr "123" "577" "276" "13643" ... 
# $ AO : chr "12" "0" "0" "0" ... 
# $ QA : chr "478" "0" "0" "0" ... 
# $ GL : chr "-38.8484,0,-6.94934" "0,-4.51545,-52.25" "0,-3.91339,-25.0455" "0,-104.457,-1226.73" ... 
# - attr(*, ".internal.selfref")=<externalptr> 

str(test2[, (namesForm) := tstrsplit(value, ":", fixed=TRUE)]) 
# Classes ‘data.table’ and 'data.frame': 10 obs. of 9 variables: 
# $ POS : num 254 280 303 22 105 173 230 235 257 258 
# $ value: chr "0/1:15:3:123:12:478:-38.8484,0,-6.94934" "0/0:15:15:577:0:0:0,-4.51545,-52.25" "0/0:13:13:276:0:0:0,-3.91339,-25.0455" "0/0:367:347:13643:0:0:0,-104.457,-1226.73" ... 
# $ GT : chr "0/1" "0/0" "0/0" "0/0" ... 
# $ DP : chr "15" "15" "13" "367" ... 
# $ RO : chr "3" "15" "13" "347" ... 
# $ QR : chr "123" "577" "276" "13643" ... 
# $ AO : chr "12" "0" "0" "0" ... 
# $ QA : chr "478" "0" "0" "0" ... 
# $ GL : chr "-38.8484,0,-6.94934" "0,-4.51545,-52.25" "0,-3.91339,-25.0455" "0,-104.457,-1226.73" ... 
# - attr(*, ".internal.selfref")=<externalptr> 
+0

감사합니다. 그 중 하나가 정말 그리워! – din