Вы можете сделать это:
mydf[,"firstcol"]
Помните, что столбец идет вторым, а не первым.
В вашем примере, чтобы увидеть, что дает mydf[mydf$firstcol,]
, давайте разберем его:
> mydf$firstcol
[1] 1 2 1
То есть, на самом деле mydf[mydf$firstcol,]
совпадает с
> mydf[c(1,2,1),]
firstcol secondcol
1 1 3
2 2 4
1.1 1 3
Итак, вы запрашиваете строки 1, 2 и 1. То есть вы запрашиваете строкуодин будет таким же, как строка 1 в mydf
, ваш 2-й будет таким же, как строка 2 в mydf
, а ваш 3-й будет таким же, как строка 1 в mydf
;и вы запрашиваете оба столбца.
Другой вопрос: почему не работает следующее:
> mydf[,firstcol]
Error in `[.data.frame`(mydf, , firstcol) : object 'firstcol' not found
То есть, почему вы должны ставить кавычки вокруг имени столбца, когда выпросите об этом, но не тогда, когда вы делаете mydf$firstcol
.Ответ прост: используемые вами операторы требуют аргументов разных типов.Вы можете посмотреть '$'
, чтобы увидеть форму x $ name, и, таким образом, вторым аргументом может быть имя, которое не заключено в кавычки.Затем вы можете посмотреть ?'['
, что фактически приведет вас к той же странице справки.И там вы найдете следующее, что объясняет это.Обратите внимание, что в «символьном» векторе должны быть записи в кавычках (именно так вы вводите символьный вектор в R
(и во многих других языках).
i, j, ...: indices specifying elements to extract or replace. Indices
are ‘numeric’ or ‘character’ vectors or empty (missing) or
‘NULL’. Numeric values are coerced to integer as by
‘as.integer’ (and hence truncated towards zero). Character
vectors will be matched to the ‘names’ of the object (or for
matrices/arrays, the ‘dimnames’): see ‘Character indices’
below for further details.