【问题标题】:Refer to the last column in R请参阅 R 中的最后一列
【发布时间】:2014-03-13 22:42:27
【问题描述】:

我正在尝试以通用方式对最后一列进行一些操作。

我在论坛上发现了一段很好的代码,它返回最后一列的名称:

tail(names(train),1) #returns [1] "last"

我仍然不知道如何直接引用我的数据集的最后一列:

data$last

【问题讨论】:

    标签: r


    【解决方案1】:

    只需使用ncol() 即可获取最后一列的索引

    data[,ncol(data)]
    

    【讨论】:

    • 这似乎不适用于数据表,仅适用于数据框。我错过了什么,为什么会这样?我正在运行 R 3.6.2 和数据表 1.12.8。
    • @jeromeResearch 对于 data.table,使用 x[, ncol(x), with = FALSE] 或使用 ".." ix <- ncol(x); x[, ..ix ]
    【解决方案2】:

    取列名的reversed 向量的第一个元素:

    rev(names(mtcars))[1]
    [1] "carb"
    

    同样,要获取最后一列,您可以使用

    rev(mtcars)[1]
    

    【讨论】:

    • 除了是一个聪明的解决方案之外,您的回答还解决了我遇到的另一个问题。 +1
    • 在数学运算中使用提取的向量(来自数据帧)时会创建一个数据帧。不理想。
    【解决方案3】:

    参考最后一栏:

    colnames(data)[ncol(data)]
    

    【讨论】:

      【解决方案4】:

      我更喜欢@Troy 的解决方案,这是另一种方式:

      train[, tail(colnames(train), 1)]
      

      【讨论】:

      • 如果你知道姓氏,那么train[,'last'] 有效; zx的方案更灵活。
      【解决方案5】:

      Troy's answer 更简单,并且可以使用“:”运算符调整为在最后一列之前引用“n”个元素。

      如果你想参考最后三列,你可以这样写:

      data[,ncol(data)] # refers to the last column
      data[,(ncol(data)-2):ncol(data)] # refers to the three last columns
      

      【讨论】:

        【解决方案6】:

        来自tidyselect 包的函数last_col() 可能会有所帮助。另请参阅此处的答案

        https://stackoverflow.com/a/44353413

        【讨论】:

          【解决方案7】:

          你可以使用tail,但你必须强制列出:

          tail(as.list(mtcars), 1)
          

          这将返回一个包含列内容的向量。如果要保留结构,可以使用:

          utils:::tail.default(mtcars, 1)
          

          以便tail 将输入视为列表。真正使用这种方法而不是 Troy 的唯一原因是,如果您想要的不仅仅是最后一列(即最后 N),那么这样做会变得容易得多。

          【讨论】:

          • 啊,是的,list(data.frame) 获取列名.. 好吧,我没有将R 用于通用编程,所以只需记住这些“有趣”的东西
          猜你喜欢
          • 2022-01-18
          • 1970-01-01
          • 1970-01-01
          • 2013-03-16
          • 1970-01-01
          • 2022-01-09
          • 2014-10-08
          • 1970-01-01
          • 2013-08-05
          相关资源
          最近更新 更多