r - 连接列并将它们添加到数据框的开头

标签 r dataframe

菜鸟到 R. 想弄清楚。我需要构建一个将新列添加到数据集开头的函数。这个新列是用户指定的其他列中值的串联。

想象一下这是名为 myDataSet 的数据集:

col_1    col_2    col_3    col_4
bat      red      1        a
cow      orange   2        b
dog      green    3        c

用户可以像这样使用该函数:
addPrimaryKey(myDataSet, cols=c(1,3,4))

获取新数据集的结果,其中第 1、3 和 4 列连接到名为 ID 的列中并添加到开头,如下所示:
ID        col_1    col_2    col_3    col_4
bat1a     bat      red      1        a
cow2b     cow      orange   2        b
dog4c     dog      green    3        c

这是我一直在编写的脚本,但我已经盯着它看了很长时间,我想我犯了一些错误。我无法弄清楚如何将参数中的列号正确地导入到粘贴函数中。
addPrimaryKey <- function(df, cols=NULL){

  newVector = rep(NA, length(cols)) ##initialize vector to length of columns

  colsN <- as.numeric(cols)

  df <- cbind(ID=paste(
    for(i in 1:length(colsN)){
      holder <- df[colsN[i]]
      holder
    }
  , sep=""), df) ##concatenate the selected columns and add as ID column to df
df
}

任何帮助将不胜感激。非常感谢

最佳答案

paste0do.call 的帮助下工作正常:

do.call(paste0, mydf[c(1, 3, 4)])
# [1] "bat1a" "cow2b" "dog3c"

因此,您的功能可能类似于:
addPrimaryKey <- function(inDF, cols) {
  cbind(ID = do.call(paste0, inDF[cols]),
        inDF)
}

您可能还想查看 interaction :
interaction(mydf[c(1, 3, 4)], drop=TRUE)
# [1] bat.1.a cow.2.b dog.3.c
# Levels: bat.1.a cow.2.b dog.3.c

关于r - 连接列并将它们添加到数据框的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21682462/

相关文章:

r - 使用 R 包 fBasics 计算样本过剩峰度

r - 如何控制绘图中符号的字体?

r - 鱿鱼游戏第 7 集与模拟

r - xts包中的reclass函数有什么作用?

python - 检查值是否在 DataFrame 系列 ("The truth value of a Series is ambiguous"错误中)

python-3.x - 通过从列表中获取列名来乘以数据框的列

r - knitr - 从 `purl(...)` 中排除 block ?

python - reshape Pandas 数据框将一行反转为多列

python - 将 "days_since_epoch"列添加到 Pandas TimeSeries DataFrame

python - 如何处理分类数据以在机器学习中进行预处理