숫자 인덱스로 data.table에서 여러 열을 선택하십시오.


143

에서 숫자 인덱스 벡터 (위치)를 사용하여 여러 열을 어떻게 선택할 수 data.table있습니까?

이것이 우리가 할 것입니다 data.frame:

df <- data.frame(a = 1, b = 2, c = 3)
df[ , 2:3]
#   b c
# 1 2 3

답변:


185

data.table 버전의 >= 1.9.8경우 다음이 모두 작동합니다.

library(data.table)
dt <- data.table(a = 1, b = 2, c = 3)

# select single column by index
dt[, 2]
#    b
# 1: 2

# select multiple columns by index
dt[, 2:3]
#    b c
# 1: 2 3

# select single column by name
dt[, "a"]
#    a
# 1: 1

# select multiple columns by name
dt[, c("a", "b")]
#    a b
# 1: 1 2

data.table 버전 < 1.9.8(숫자 열 선택 에을 사용해야 함 with = FALSE)에 대해서는 이 답변의 이전 버전 을 참조하십시오 . v1.9.8, 잠재적으로 변경되는 변경 사항, 포인트 3의 뉴스 도 참조하십시오 .


1
문제 없어요. 또한 비교 dt[,"a"]하고 dt[,"a", with=FALSE]그것이 정말 도움이 무엇 옵션을 볼 수 있습니다.
조쉬 오브라이언

3
없이이 작업을 수행 할 수있는 방법이 있습니까? 예를 들어 DT[,list(b:c)데이터 테이블에서 직접 열을 변환하는 것이 편리하다는 것을 알았으므로 예를 들어 할 수는 DT[,list(1/b,2*c)]있지만 함께 사용할 수 는 없습니다.
jamborta

2
with=FALSE이 경우 패키지를 변경 하지 않아도됩니다. github.com/Rdatatable/data.table/issues/…
Frank

1
@ 프랭크-좋은 소식입니다! 관심을 가져 주셔서 감사합니다. 이 변경 사항이 CRAN에 배포 된 data.table 버전으로 변경되면 이 답변을 편집하여 변경 사항을 알리겠습니다. (그리고 당신이나이 글을 읽는 다른 사람들도) 그렇게 되 자마자 미리 알림을 보내주십시오.
Josh O'Brien

2
@Valentas 웃기게 물어봐. data.frame사용할 호환 방법 이 없습니다 with=FALSE. 그러나, 약 3 주 전에의로의 개발 버전 data.table는 같은 전화에 수정 된 dt[, 2], dt[, 2:3], dt[, "b"], 그리고 dt[, c("b", "c")]그들과 함께에서와 동일하게 동작 data.frame없이 명시 적으로 설정할 필요 with=FALSE. 대단해! 변경 사항을 설명하는 NEWS 항목을 포함하여 특정 커밋에 대해서는 여기참조하십시오 .
Josh O'Brien

43

조금 장황하지만 숨겨진 .SD변수 를 사용하는 데 익숙해졌습니다 .

b<-data.table(a=1,b=2,c=3,d=4)
b[,.SD,.SDcols=c(1:2)]

약간의 번거 로움이 있지만 다른 data.table 기능을 잃지 않을 것이므로 (생각하지 않습니다) 조인 테이블 등과 같은 다른 중요한 기능을 계속 사용할 수 있어야합니다.


6
프로그래밍 방식으로 열 목록을 만들 때 번거롭지 않고 매우 유용합니다.
Chris

39

이름 을 사용하여 열 을 선택하려면 간단히 .()별칭을 사용하십시오 list().

library(data.table)
dt <- data.table(a = 1:2, b = 2:3, c = 3:4)
dt[ , .(b, c)] # select the columns b and c
# Result:
#    b c
# 1: 2 3
# 2: 3 4

19

v1.10.2부터는 다음을 사용할 수도 있습니다. ..

dt <- data.table(a=1:2, b=2:3, c=3:4)

keep_cols = c("a", "c")

dt[, ..keep_cols]

3
이 답변에 감사드립니다. 나는 또한 발견 dt[, !..keep_cols]하고 dt[, -..keep_cols] 예상대로 작품!
IceCreamToucan

3

@ Tom,이 솔루션을 지적 해 주셔서 대단히 감사합니다. 그것은 나를 위해 잘 작동합니다.

인쇄 및 위의 예제에서 하나의 열을 제외시키는 방법을 찾고있었습니다. 두 번째 열을 제외하려면 다음과 같이 할 수 있습니다

library(data.table)
dt <- data.table(a=1:2, b=2:3, c=3:4)
dt[,.SD,.SDcols=-2]
dt[,.SD,.SDcols=c(1,3)]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.