data.table에서 이름으로 열을 어떻게 삭제합니까?
에서 "foo"라는 열을 제거하려면 data.frame
다음을 수행하십시오.
df <- df[-grep('foo', colnames(df))]
그러나 일단 객체 df
로 변환 되면 data.table
열을 제거하는 방법은 없습니다.
예:
df <- data.frame(id = 1:100, foo = rnorm(100))
df2 <- df[-grep('foo', colnames(df))] # works
df3 <- data.table(df)
df3[-grep('foo', colnames(df3))]
그러나 일단 data.table
객체 로 변환되면 더 이상 작동하지 않습니다.
다음 중 하나가 foo
data.table에서 열 을 제거 합니다 df3
.
# Method 1 (and preferred as it takes 0.00s even on a 20GB data.table)
df3[,foo:=NULL]
df3[, c("foo","bar"):=NULL] # remove two columns
myVar = "foo"
df3[, (myVar):=NULL] # lookup myVar contents
# Method 2a -- A safe idiom for excluding (possibly multiple)
# columns matching a regex
df3[, grep("^foo$", colnames(df3)):=NULL]
# Method 2b -- An alternative to 2a, also "safe" in the sense described below
df3[, which(grepl("^foo$", colnames(df3))):=NULL]
data.table 은 다음 구문도 지원합니다.
## Method 3 (could then assign to df3,
df3[, !"foo"]
그러나 실제로 빼기 열 보기를 인쇄하는 대신 열 "foo"
을 실제로 제거 하려면 방법 1을 대신 사용하고 싶습니다.df3
df3
"foo"
(마십시오 당신이 방법에 의존 사용하는 경우 있음 grep()
또는 grepl()
, 당신은 설정해야 pattern="^foo$"
보다는 "foo"
당신이 같은 이름을 가진 열을 원하지 않는 경우, "fool"
그리고 "buffoon"
(함유 한 것과 foo
도 일치하고 제거 할) 문자열로합니다.)
덜 안전한 옵션, 대화식 사용에 적합 :
다음 두 관용구도 작동 하지만 ( 열 일치 가 df3
포함 된"foo"
경우) 예상치 못한 방식으로 실패합니다. 예를 들어, 존재하지 않는 column을 검색하기 위해 그중 하나를 사용하면 "bar"
행이 0 인 data.table이됩니다.
결과적으로, 이들은 예를 들어, substring을 포함하는 이름을 가진 열을 빼고 data.table을 표시하려고하는 대화식 사용에 가장 적합합니다 "foo"
. 프로그래밍 목적으로 (또는 실제로 df3
사본 에서 열 대신 열을 제거하려는 경우 ), 방법 1, 2a 및 2b가 실제로 가장 좋은 옵션입니다.
# Method 4:
df3[, .SD, .SDcols = !patterns("^foo$")]
마지막으로을 사용하는 접근 방식이 with=FALSE
있지만 data.table
점차이 인수를 사용하지 않기 때문에 피할 수있는 곳에서는 권장하지 않습니다. 옵션이 실제로 필요한 경우를 대비하여 여기에 표시하십시오.
# Method 5a (like Method 3)
df3[, !"foo", with=FALSE]
# Method 5b (like Method 4)
df3[, !grep("^foo$", names(df3)), with=FALSE]
# Method 5b (another like Method 4)
df3[, !grepl("^foo$", names(df3)), with=FALSE]
set
이를 위해 [.data.table
in 루프를 사용할 수 있습니다 .
dt <- data.table( a=letters, b=LETTERS, c=seq(26), d=letters, e=letters )
set( dt, j=c(1L,3L,5L), value=NULL )
> dt[1:5]
b d
1: A a
2: B b
3: C c
4: D d
5: E e
열 이름으로 수행 which(colnames(dt) %in% c("a","c","e"))
하려면 작동해야합니다 j
.
I simply do it in the data frame kind of way:
DT$col = NULL
Works fast and as far as I could see doesn't cause any problems.
UPDATE: not the best method if your DT is very large, as using the $<-
operator will lead to object copying. So better use:
DT[, col:=NULL]
Very simple option in case you have many individual columns to delete in a data table and you want to avoid typing in all column names #careadviced
dt <- dt[, -c(1,4,6,17,83,104), with =F]
This will remove columns based on column number instead.
It's obviously not as efficient because it bypasses data.table advantages but if you're working with less than say 500,000 rows it works fine
Suppose your dt has columns col1
, col2
, col3
, col4
, col5
, coln
.
To delete a subset of them:
vx <- as.character(bquote(c(col1, col2, col3, coln)))[-1]
DT[, paste0(vx):=NULL]
Here is a way when you want to set a # of columns to NULL given their column names a function for your usage :)
deleteColsFromDataTable <- function (train, toDeleteColNames) {
for (myNm in toDeleteColNames)
train <- train [,(myNm):=NULL,with=F]
return (train)
}
DT[,c:=NULL] # remove column c
For a data.table, assigning the column to NULL removes it:
DT[,c("col1", "col1", "col2", "col2")] <- NULL
^
|---- Notice the extra comma if DT is a data.table
... which is the equivalent of:
DT$col1 <- NULL
DT$col2 <- NULL
DT$col3 <- NULL
DT$col4 <- NULL
The equivalent for a data.frame is:
DF[c("col1", "col1", "col2", "col2")] <- NULL
^
|---- Notice the missing comma if DF is a data.frame
Q. Why is there a comma in the version for data.table, and no comma in the version for data.frame?
A. As data.frames are stored as a list of columns, you can skip the comma. You could also add it in, however then you will need to assign them to a list of NULL
s, DF[, c("col1", "col2", "col3")] <- list(NULL)
.
참고URL : https://stackoverflow.com/questions/9202413/how-do-you-delete-a-column-by-name-in-data-table
'Programming' 카테고리의 다른 글
장고 가져 오기 오류-이름이 core.management 인 모듈이 없습니다. (0) | 2020.05.18 |
---|---|
정수를 삽입하려고 할 때 MongoDB 삽입 부동 (0) | 2020.05.18 |
보안 웹 서비스 : HTTPS를 통한 REST 대 SOAP + WS- 보안. (0) | 2020.05.18 |
VueJs 2.0-`props '변경을 듣는 방법 (0) | 2020.05.18 |
숫자의 가장 큰 소인수를 구하는 알고리즘 (0) | 2020.05.18 |