我是一名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
}
任何帮助都将不胜感激。非常感谢。
mydf[c(1, 3, 4)]
实际上是一个由三个向量组成的列表,因为数据框基本上就是列表。do.call(paste0...)
相当于paste0(mydf[, 1], mydf[, 3], mydf[, 4])
,其中列表中的每个值成为paste0
的一个参数。 - BrodieG