Переменная, которая помещается в скобку таблицы данных, просто выходит как есть. (Язык R) - PullRequest
0 голосов
/ 08 апреля 2020

Я использую пакеты таблиц данных R. Я просто хочу получить доступ к указанному c столбцу таблицы данных, используя переменную. Но, когда я помещаю переменную в скобку таблицы данных, переменная просто выходит как есть. не таблица данных.

например,

df <- matrix(1:12,nrow=4,ncol=3)
df <- as.data.table(df)
colnames(df) <- c("A","B","C")
list <- c("A","B","C")
df[,"C"]

Результат приведенного выше кода просто "C", а не (9, 10, 11, 12). И другой результат, который я пытался выяснить, эта проблема ниже.

df[,list[3]]

[1] "C"

df[,"C"]

C

1: 9

2: 10

3: 11

4: 12

list[3] == "C"

[1] ИСТИНА

Почему возникает эта проблема? Как получить указанный столбец c из таблицы данных, используя переменную? Спасибо.

1 Ответ

0 голосов
/ 08 апреля 2020

Какую версию data.table вы используете? Они изменили это некоторое время go (очевидно v1.9.8 ).

Для вашей версии попробуйте with = FALSE. С help(data.table):

По умолчанию с = ИСТИНА и j оценивается в кадре x; имена столбцов могут быть использованы в качестве переменных. В случае перекрывающихся имен переменных внутри набора данных и в родительской области вы можете использовать префикс двойной точки ..cols для явной ссылки на родительскую область переменной 'cols, а не из вашего набора данных.

Когда j является символьным вектором столбца имена, числовой c вектор позиций столбца для выбора или формы startcol: endcol, а возвращаемое значение всегда является data.table. with = FALSE больше не требуется для динамического выбора столбцов.

library(data.table)
df[,"C",with=FALSE]
    C
1:  9
2: 10
3: 11
4: 12

Это также работает.

df[,list[3],with=FALSE]
    C
1:  9
2: 10
3: 11
4: 12

Чем больше данных.табильный способ сделать это будет C без кавычек.

df[,C]
[1]  9 10 11 12

Вы можете задаться вопросом, почему df[,"C"] возвращает data.table, а df[,C] возвращает вектор. И это, я бы сказал, хороший вопрос. Я предполагаю, потому что df[,"C"] похоже на то, как можно было бы подставить data.frame, которое также вернуло бы data.frame.

sessionInfo()
R version 3.6.3 (2020-02-29)
data.table_1.12.8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...