Select 1列当DF在R中有2个相似的列名

Select 1 column when DF has 2 similar column names in R

我有两个问题。首先,我有两个列名称相似的数据集。我想 select 第一个而不使用第二个。列名中的数值是传感器的序列号,可以变化,可以在不同的列中。

如何 select 2 的第一列名称以便绘制它或在计算中使用它?

如何恢复那些长列名以便我可以使用它们?例如,如何让 "Depth_456" 在 depthmax2 中使用,而无需输入或创建名为 depth 的子集。问题是数值,即传感器的序列号,它随着仪器的不同和数据集的不同而变化。我正在尝试编写适用于所有不同仪器的通用代码。

我的数据

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)

我们需要 [[ 而不是 $

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 适用于向量。如果有多个匹配项,我们可能需要循环并获得 max

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