Noob在这里向R.想要找出一些东西.我需要构建一个函数,在数据集的开头添加一个新列.此新列是用户指定的其他列中的值的串联.
想象一下,这是名为myDataSet的数据集:
col_1 col_2 col_3 col_4
bat red 1 a
cow orange 2 b
dog green 3 c
Run Code Online (Sandbox Code Playgroud)
用户可以像这样使用这个功能:
addPrimaryKey(myDataSet, cols=c(1,3,4))
Run Code Online (Sandbox Code Playgroud)
获取新数据集的结果,将第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
Run Code Online (Sandbox Code Playgroud)
这是我一直在努力的剧本,但我一直盯着它,我想我犯了一些错误.我无法弄清楚如何正确地将参数中的列号输入到粘贴函数中.
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
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.非常感谢
A5C*_*2T1 12
paste0工作得很好,有一些帮助do.call:
do.call(paste0, mydf[c(1, 3, 4)])
# [1] "bat1a" "cow2b" "dog3c"
Run Code Online (Sandbox Code Playgroud)
因此,您的功能可以是:
addPrimaryKey <- function(inDF, cols) {
cbind(ID = do.call(paste0, inDF[cols]),
inDF)
}
Run Code Online (Sandbox Code Playgroud)
您可能还想看看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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19634 次 |
| 最近记录: |