Noob here to 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))
得到一个新的数据有3列1,设置的结果和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
T他是我一直在努力的剧本,但我一直在盯着它,我想我犯了一些错误。我无法弄清楚如何正确地将参数中的列号转换为粘贴功能。
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
}
任何帮助将不胜感激。非常感谢
这完美的作品,非常感谢。我正在看互联网上的do.call,但仍然无法理解它是如何在此贴上的。你能否解释为什么这会起作用? –
@CrayonConstantinople,'mydf [c(1,3,4)]'实际上是一个有三个向量的列表,因为数据帧基本上是列表。 'do.call(paste0 ...)'相当于'paste0(mydf [,1],mydf [,3],mydf [,4])',其中列表中的每个值都成为'paste0'的参数。 – BrodieG