Выберите 1 столбец, если DF имеет 2 одинаковых имени столбца в R - PullRequest
1 голос
/ 11 февраля 2020

У меня 2 проблемы. Во-первых, у меня есть наборы данных с двумя именами столбцов, которые похожи. Я хочу выбрать первый, а не использовать второй. Числовые значения c в именах столбцов представляют собой серийный номер датчика и могут различаться, и они могут находиться в разных столбцах.

Как выбрать имя первого столбца для 2, чтобы я мог построить его или использовать это в расчетах?

Как мне восстановить эти длинные имена столбцов, чтобы я мог их использовать? Например, как получить «Depth_456» для использования в deepmax2 без ввода его или создания подмножества с именем глубины. Проблема заключается в значении цифры c, которое представляет собой серийный номер датчика, и оно изменяется от инструмента к инструменту и от набора данных к набору данных. Я пытаюсь написать общий код c, который будет работать на всех различных инструментах.

Мои данные

df1 <- data.frame(Sal_224 = 1:8, Temp_696 = 1:8, Depth_456 = 1:8, Temp_654 = 8:15)
df2<-data.frame(sapply(df1, function(x) as.numeric(as.character(x))))

temp<- df2[grep("Temp", names(df2), value=TRUE)]
depth<- df2[grep("Depth", names(df2), value=TRUE)]

depthmax<- max(depth, na.rm = TRUE)
depthmax2<- max(df2$"Depth_456", na.rm = TRUE)

Это не работает

depthmax2<- max(df2$grep("Depth", names(df2), value=TRUE), na.rm = TRUE)

1 Ответ

0 голосов
/ 11 февраля 2020

Нам нужно [[ вместо $.

max(df2[[ grep("Depth", names(df2), value=TRUE)]], na.rm = TRUE)
#[1] 8

Или другой вариант: startsWith

max(df2[[names(df2)[startsWith(names(df2), "Depth")]]], na.rm = TRUE)
#[1] 8

Кроме того, max работает с вектором. Если есть более одного совпадения, нам, возможно, придется l oop и получить max

sapply(df2[ grep("Depth", names(df2), value=TRUE)], max, na.rm = TRUE)
...