Chcę zmienić poziomy czynników w kolumnie przy użyciu setattr
. Jednak po wybraniu kolumny standardowy sposób (0123), nie jest aktualizowany. Z drugiej strony przy wyborze kolumny w niekonwencjonalny sposób w ustawieniu data.table
- a mianowicie przy użyciu $
- działa.Zmienianie poziomów czynników w kolumnie z setattr jest wrażliwe na sposób utworzenia kolumny
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
Czuje się jakbym brakuje niektórych data.table
(R
?) Podstawy tutaj. Czy ktoś może wyjaśnić, co się dzieje?
Znalazłem dwa inne post setattr
i levels
:
setattr
on levels
preserving unwanted duplicates (R data.table)
How does one change the levels of a factor column in a data.table
Obaj wykorzystywane $
aby wybrać kolumnę. Żadne z nich nie wspomniało o metodzie [ , col]
.
Zgodnie z dokumentami, nie powinno być problemu - * "setattr" akceptuje dowolne wejście; np. lista, kolumny "data.frame" lub "data.table". * Otrzymuję ten sam problem, co ty. – thelatemail
To zachowanie ma dla mnie sens. Fwiw, zawsze robię po prostu setattr wewnątrz j, który wydaje się działać dobrze tutaj: 'd [, setattr (x," levels ", lev)]' – Frank
@Frank Dziękuję za twoją opinię. Byłem tak zmęczony wczoraj, że udało mi się tylko nacisnąć strzałkę w górę, zanim zasnąłem. Czy marzyłeś o słodkich snach (czy było to koszmarem?) Po pół-traumatycznym doświadczeniu "j". Przynajmniej miałem rację w moim "Wydaje mi się, że brakuje mi podstaw" data.table "(" R "?) Here_";) – Henrik