В R, Каково различие между df [“x”] и df$x

Где может я находить информацию о различиях между обращением к столбцу в data.frame через:

df <- data.frame(x=1:20,y=letters[1:20],z=20:1)

df$x
df["x"]

Они оба возвращают "те же" результаты, но не обязательно в том же формате. Другая вещь, которую я заметил, состоит в том, что df$x возвращает список. Принимая во внимание, что df ["x"] возвращает data.frame.

Править: Однако зная, который использовать, в котором ситуация стала проблемой. Существует ли лучшая практика здесь, или она действительно сводится к знанию, чего требуют команда или функция? До сих пор я просто циклически повторялся через них, если моя функция не работает в первом (метод проб и ошибок).

18
задан smci 11 May 2012 в 19:34
поделиться

5 ответов

Если я не ошибаюсь, df $ x совпадает с df [[' х ']] . [[] используется для выбора любого отдельного элемента, тогда как [ возвращает список выбранных элементов. См. Также справочник по языку . Я обычно вижу, что [[используется для списков, [для массивов и $ для получения одного столбца или элемента. Если вам нужно выражение (например, df [[имя]] или df [, имя]), используйте также обозначение [или [[. Обозначение [также используется, если выбрано несколько столбцов. Например, df [, c ('name1', 'name2')]. Я не думаю, что для этого есть лучшие практики.

14
ответ дан 30 November 2019 в 06:07
поделиться

df $ x и df [[x]] do тоже самое.

Предположим, у вас есть набор данных с именем один . Одна из этих переменных - факторная переменная, Регион . Использование one $ Region позволит вам выбрать конкретную переменную. Примите во внимание следующее:

one <- read.csv("IED.csv")
one$Region

Выполнение следующего кода также позволяет изолировать эту переменную / уровень.

one[["Region"]]

Каждый код дает следующий результат:

> one$Region
    [1] RC SOUTH      RC SOUTH      RC SOUTH      RC EAST       RC EAST      
    [6] RC EAST       RC EAST       RC EAST       RC EAST       RC EAST      
   [11] RC SOUTH      RC SOUTH      RC EAST       RC EAST       RC EAST      
   [16] RC EAST       RC EAST       RC SOUTH      RC SOUTH      RC EAST      
   [21] RC SOUTH      RC EAST       RC CAPITAL    RC EAST       RC EAST 


> one[["Region"]]
    [1] RC SOUTH      RC SOUTH      RC SOUTH      RC EAST       RC EAST      
    [6] RC EAST       RC EAST       RC EAST       RC EAST       RC EAST      
   [11] RC SOUTH      RC SOUTH      RC EAST       RC EAST       RC EAST      
   [16] RC EAST       RC EAST       RC SOUTH      RC SOUTH      RC EAST      
   [21] RC SOUTH      RC EAST       RC CAPITAL    RC EAST       RC EAST 

«Они оба возвращают« одинаковые »результаты, но не обязательно в одном и том же формате». - Никаких отличий не заметил. Каждая команда произвела одинаковые выходные данные в одном и том же формате. Возможно, это ваши данные.

Надеюсь, что это поможет.

РЕДАКТИРОВАТЬ:

Неправильно прочитали исходный вопрос. df ["x"] дает следующее:

> one["Region"]
             Region
1          RC SOUTH
2          RC SOUTH
3          RC SOUTH
4           RC EAST
5           RC EAST
6           RC EAST
7           RC EAST
8           RC EAST
9           RC EAST
10          RC EAST

Не уверен, почему возникает разница.

0
ответ дан 30 November 2019 в 06:07
поделиться

Другое отличие состоит в том, что df $ w возвращает NULL и df ['w'] или df [['w']] выдает ошибку с вашим примером фрейма данных.

16
ответ дан 30 November 2019 в 06:07
поделиться

В дополнение к странице индексирования в руководстве вы можете найти это краткое описание на странице справки? "$":

Индексирование с помощью ‘[’ аналогично атомарному векторов и выбирает список указанный элемент (ы).

Оба ‘[[’ и ‘$’ выбирают один элемент списка. Главный разница в том, что "$" не позволяет вычислял индексы, тогда как "[[" делает. ‘X $ name’ эквивалентно ‘x [[" name ", точное = FALSE]] ’. Также частичный поведение соответствия «[[» может быть контролируется с помощью «точного» аргумента.

Вызов функций, конечно, разные. См. get ("[. Data.frame") по сравнению с get ("[[. Data.frame") по сравнению с get ("$")

9
ответ дан 30 November 2019 в 06:07
поделиться

Если вы используете df [, "x"] вместо df ["x"], вы получите тот же результат, что и df $ x. Запятая означает, что вы выбираете столбец по имени.

5
ответ дан 30 November 2019 в 06:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: