【问题标题】:Select 1 column when DF has 2 similar column names in R当 DF 在 R 中有 2 个相似的列名时选择 1 列
【发布时间】:2020-02-10 22:59:47
【问题描述】:

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

如何选择 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)

【问题讨论】:

    标签: r grepl


    【解决方案1】:

    我们需要[[ 而不是$

    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)
    

    【讨论】:

    • 这很适合深度;但是,我意识到我不清楚我的 temp 问题,它返回 8 个对象和 2 个变量。我只想使用第一个临时变量而不是第二个。那么如何将它们分开,以便我可以使用第一个 - Temp_696?注意: temp 末尾的数字因数据集来自的仪器而异。 @akrun
    • @seaviper 你需要max(df2[[grep("Temp", names(df2), value=TRUE)[1]]], na.rm = TRUE)
    • 您的第一个解决方案适用于深度,但我还需要弄清楚如何获得第一个 temp,当您使用 grep 时它返回 2 temp's 。我认为使用 temp1 的简单方法可能是最好的
    • 我通过在 temp
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 2020-02-07
    • 1970-01-01
    • 2019-11-11
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多