如何使用自定义函数()和if_else以及grep来重新编码R中的值

6ju8rftf  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(108)

我正在尝试创建一个自定义函数,可以将该函数应用于不同的列,以便将值从字符重新编码为数字数据。数据有许多空格,并且每个字符条目在每个给定列中都是相同的(即,当有一个调查问题是“选择所有适用的”,所以你需要创建二进制1/0变量,如果选择了)。因此,我尝试创建一个函数来完成以下操作:
在数据的指定列范围内,如果存在任何字符,则将该条目重新编码为1,否则标记为NA
这可以作为一个独立函数完美地工作,如下所示:

data$var <- if_else(data$var == data$var[grep("[a-z]", data$var)], 1, NULL)

但是我在创建一个可以应用于许多不同列的函数时遇到了麻烦。
我曾尝试用lapply、mutate和if_else通过以下方法解决这个问题,但都无济于事。
我可以使用以下fxn正确返回索引,但需要更新实际的 Dataframe :

fxn <- function(x) {
  if_else(x == (x[grep("[a-z]", x)]), 1, NULL)
}

fxn(data$variable)

但是当我尝试使用mutate更新 Dataframe 时,它不起作用:

data %>% 
  mutate(across(.cols = variable, fxn))

任何帮助将不胜感激,因为有100+列我需要这样做!

pcww981p

pcww981p1#

我们创建函数并将其应用于lapply所选的列。在下面的示例中,选择了列1到列5并应用了函数,然后又将其赋值回去

fxn <- function(x) NA^(!grepl('[a-z]', x))
data[1:5] <- lapply(data[1:5], fxn)

相关问题