【问题标题】:Insert column at beginning of a data frame [duplicate]在数据框的开头插入列[重复]
【发布时间】:2014-04-06 09:41:12
【问题描述】:

如何将一列添加到 R data.frame 作为新的第一列,以便所有其他列移动一列?

喜欢:

a|b|c --> new|a|b|c

我需要这样做,因为我希望 row.names 成为一个离散列。这是必需的,因为write.arff 函数将data.frame 作为输入,但在写入文件时不保留名称。

【问题讨论】:

  • cbind(rownames(df), df)?
  • 谢谢。我现在意识到我问了一些非常基本的问题,但不知何故我没有找到答案。
  • 在旁注中,您是否正在导出以在Weka 中使用?在 Weka 中几乎没有什么可以在 R 中完成的,而无需间歇性步骤
  • @RicardoSaporta 是的,它用于WEKA。正如您可能从我的问题中看到的那样,我对 R 不是很熟悉,但使用 WEKA 已经有一段时间了。所以尽管如此,我可能会坚持下去。但我会看看 R 中的机器学习功能。

标签: r dataframe arff


【解决方案1】:

这在cmets中已经回答过了,但是为了更清楚说明有答案,这里举个小例子:

首先,一些示例数据:

(df <- data.frame(A = 1:2, B = 3:4, row.names = c("row1", "row2")))
#      A B
# row1 1 3
# row2 2 4

来自 cmets 的建议。请注意,原来的row.names 仍然是数据的一部分。

cbind(rn = rownames(df), df)
#        rn A B
# row1 row1 1 3
# row2 row2 2 4

您可以通过在cbind 步骤中设置row.names = NULL 来消除这种情况。由于您是cbinding data.frames,因此您还可以在必要时将其他参数传递给data.frame(例如stringsAsFactors = FALSE,如果您不希望“rn”列成为factor)。

cbind(rn = rownames(df), df, row.names = NULL)
#     rn A B
# 1 row1 1 3
# 2 row2 2 4

【讨论】:

    猜你喜欢
    • 2019-06-28
    • 2016-10-01
    • 2019-12-24
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    相关资源
    最近更新 更多