我有一个for-loop
可以纠正字符串中的拼写错误(实际上它会将拼写错误的字符串更改为相同)。
由于我通常使用dplyr
的函数并且具有许多更改的长代码序列,因此我希望以dplyr
友好的方式在for-loop
中使用mutate
{1}}致电。
这是一个例子。
name <- c('pat','paet','Pat', 'bob',
'beb','bab')
name
[1] "pat" "paet" "Pat" "bob" "beb" "bab"
for ( i in seq_along(name)){
name <- ifelse(agrepl(name[[i]],name),name[[i]],name)
}
name
[1] "pat" "pat" "pat" "bob" "bob" "bob"
使用dplyr
/ data_frame
方法时,我想获得上述结果。
df <- data_frame(name_ii = c('pat',
'paet',
'Pat',
'bob',
'beb',
'bab'))
df %>%
mutate(name = name_ii,
name = for ( i in seq_along(name)){
name <- ifelse(agrepl(name[[i]],name),name[[i]],name)
}
)
Error in mutate_impl(.data, dots) : Binding not found: name_ii.
我试图将它放入一个名为identicator
的用户定义函数中。
identicator <- function(x){
name <- x
for ( i in seq_along(name)){
name <- ifelse(agrepl(name[[i]],name),name[[i]],name)
}
}
df %>%
mutate(new.name = identicator(x))
Error in mutate_impl(.data, dots) :
Column `d` is of unsupported type NULL
由于
答案 0 :(得分:1)
identicator
的一个问题是,在for
循环内分配后,不会返回“名称”
identicator <- function(x){
name <- x
for ( i in seq_along(name)){
name <- ifelse(agrepl(name[[i]],name),name[[i]],name)
}
name ###
}
,第二个问题是函数参数是'name_ii'列
df %>%
mutate(new.name = identicator(name_ii))
# A tibble: 6 x 2
# name_ii new.name
# <chr> <chr>
#1 pat pat
#2 paet pat
#3 Pat pat
#4 bob bob
#5 beb bob
#6 bab bob