Чи є спосіб посилатися на назви стовпців кадру даних як на змінну, а не на рядок (в 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