R循环中的两个变量



我需要在命名列表上循环一个函数,其中list[i]是一个参数,names(list)[i]是另一个参数。

这里有一些伪代码:

#generate DF
employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c(21000, 23400, 26800)
startdate <- as.Date(c('2010-11-1','2008-3-25','2007-3-14'))
df <- data.table(employee, salary, startdate)
df$'tags' <- NA
#Create named list
test <- list(
'JMan' = 'Doe',
'PMan' = 'Peter',
'JMan' = 'Hope'
)
#Create function to populate df$tags with output
func <- function(pattern, name) {
df[, tags := fcase(
employee %like% regex(pattern), name,
rep(TRUE, nrow(df)), as.character(df$tags)
)
]
}
#test function
df <- func(as.character(test[1]), names(test)[1])

这一切都很好:

employee salary  startdate tags
1:   John Doe  21000 2010-11-01 JMan
2: Peter Gynn  23400 2008-03-25 <NA>
3: Jolie Hope  26800 2007-03-14 <NA>

然而,当我尝试迭代它时:

for (i in test) {
df <- func(as.character(test[i]), names(test)[i])

}

什么也没发生。

如有任何帮助,我们将不胜感激。我试过用苹果((和苹果((,但没有成功。

您可以将函数更改为并使用for循环进行替换。

library(data.table)
func <- function(df, pattern, name) {
df[grepl(pattern, employee), tags := name]
}
for (i in seq_along(test)) {
df <- func(df, test[[i]], names(test)[i])
}
df
#     employee salary  startdate tags
#1:   John Doe  21000 2010-11-01 JMan
#2: Peter Gynn  23400 2008-03-25 PMan
#3: Jolie Hope  26800 2007-03-14 JMan

数据

employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c(21000, 23400, 26800)
startdate <- as.Date(c('2010-11-1','2008-3-25','2007-3-14'))
df <- data.table(employee, salary, startdate)
df$tags <- NA_character_

这里有一个额外的答案,对其进行了一些压缩,并取消了for循环,只是为了提供更多的想法。(注意,你能保证每个员工只有一场比赛吗?(


df <- data.table(employee, salary, startdate)
func <- function(employee) {
i <- sapply( unlist(test), grepl, x=employee[1] )
if(!any(i))
return(NA)
names(test)[i]
}
df[, tags := func(employee) , by=1:nrow(df) ]

相关内容

  • 没有找到相关文章

最新更新