/ / R: Довідковий кадр даних для повернення імен стовпців у вигляді змінної, а не рядкової (для підмножини) - рядок, r, змінні, підмножина

R: кадр довідкових даних для повернення назв стовпців як змінної, а не рядок (для підмножини) - рядок, r, змінні, підмножина

Чи є спосіб посилатися на назви стовпців кадру даних як на змінну, а не на рядок (в R)? Скажіть, я хочу отримати ім'я першого стовпця кадру даних df.

> colnames(df)[[1]]
[1] "colname1"

Причина, яку я запитую, - це у мене важко робити часпідмножина функції узагальнена до будь-якого кадру даних. Скажіть, я хочу зробити умовний підмножина на кадрі даних з відомим умовним, але я не знаю ім'я стовпця під час виконання (лише номер стовпця).

> df<-data.frame( x=c(1:3), y=c(4:6))
> df.sub <- subset(df, df$y >5 )

Але давайте скажемо, що я не знаю ім'я стовпця df під час виконання, тільки що його номер стовпця 2. Виклик функції

> df.sub <- subset(df, colnames(df)[[2]] >5 )

Не працює, тому що стовпці повертають рядок,і підмножина "розумна" і шукає всередині df на ім'я об'єкта. Чи є хороший спосіб цього? Я міг би використати ["s замість цього, але я вважаю, що проблема була б такою ж.

Відповіді:

4 для відповіді № 1

Ви повинні мати змогу успішно використовувати подвійні квадратні дужки для імені чи номера індексу:

> subset(df, df[["y"]] > 5)
x y
3 3 6
> subset(df, df[[2]] > 5)
x y
3 3 6

Однак зверніть увагу на наступне на сторінці довідки до subset:

Увага

Це функція зручності, призначена для використанняінтерактивно. Для програмування краще використовувати стандартні функції набору наборів [, і зокрема нестандартна оцінка набору аргументів може мати непередбачувані наслідки.


І, щоб дати деякі погані поради, ви також можете скористатися get:

> subset(df, get(colnames(df)[2]) > 5)
x y
3 3 6

Як зазначає @Roland в коментарях, більшість користувачів R фактично користуються чимось за принципом:

> df[df[[2]] > 5, ]
x y
3 3 6