setattr
kullanarak bir sütunun faktör düzeylerini değiştirmek istiyorum. Ancak, sütun standart data.table
yolu (dt[ , col]
) seçildiğinde, levels
güncelleştirilmez. Öte yandan, data.table
ayarında, yani $
'un kullanıldığı alışılmamış bir şekilde sütunu seçerken - çalışır.Setattr ile bir sütundaki faktör düzeylerini değiştirmek, sütunun nasıl oluşturulduğu konusunda hassastır.
library(data.table)
# Some data
d <- data.table(x = factor(c("b", "a", "a", "b")), y = 1:4)
d
# x y
# 1: b 1
# 2: a 2
# 3: a 3
# 4: b 4
# We want to change levels of 'x' using setattr
# New desired levels
lev <- c("a_new", "b_new")
# Select column in the standard data.table way
setattr(x = d[ , x], name = "levels", value = lev)
# Levels are not updated
d
# x y
# 1: b 1
# 2: a 2
# 3: a 3
# 4: b 4
# Select column in a non-standard data.table way using $
setattr(x = d$x, name = "levels", value = lev)
# Levels are updated
d
# x y
# 1: b_new 1
# 2: a_new 2
# 3: a_new 3
# 4: b_new 4
# Just check if d[ , x] really is the same as d$x
d <- data.table(x = factor(c("b", "a", "a", "b")), y = 1:4)
identical(d[ , x], d$x)
# [1] TRUE
# Yes, it seems so
bazı data.table
kaçırıyorum gibi geliyor (R
?) Buraya temelleri. Neler olduğunu açıklayan var mı?
Ben setattr
ve levels
diğer iki yazı bulduk:
setattr
on levels
preserving unwanted duplicates (R data.table)
How does one change the levels of a factor column in a data.table
Hem sütun seçmek için $
kullandı. Hiçbiri [ , col]
yolundan bahsetmedi.
Dokümanlara göre bir sorun olmamalı - * ‘setattr’ herhangi bir girişi kabul eder; Örneğin, liste, bir "data.frame" veya ‘data.table’ sütunları. * Sizinle aynı sorunu yaşıyorum. – thelatemail
Bu davranış bana mantıklı geliyor. Fwiw, herzaman j'nin içinde setattr yapıyorum, ki burada iyi çalışıyor gibi görünüyor: 'd [, setattr (x," levels ", lev)]' – Frank
@Frank Geri bildiriminiz için teşekkür ederiz. Dün çok yorgundum, bu yüzden sadece uykuya dalmadan önce yukarı-oka basmayı başardım. Yarı travmatik “j” deneyiminden sonra tatlı rüyalar mı (ya da kabuslar mıydı?). En azından ben de haklıymışım gibi "data.table" ("R'?") Temellerini burada eksik hissediyorum gibi hissediyorum ";) – Henrik