我需要重新创建一些变量,但是我没有使用for循环,而是尝试使用带有'recode‘函数的'apply’函数。
下面是我到目前为止已经尝试过的一些代码。
vars <- c("var","var2","var3","var4","var5")
recode_vars <- apply(recode(mydata,vars,"lo:129=0;130:hi=1"))
但是,这会产生错误消息: error in match.fun(FUN):缺少参数"FUN“,没有默认值。
有人知道我该怎么解决这个问题吗?或者只是如何在一般情况下一起使用‘应用’和‘重新编码’?
发布于 2021-11-26 16:50:28
我们可以在across中使用recode
library(dplyr)
vars <- c("var1", "var2", "var3", "var4", "var5")
mydata %>%
mutate(across(all_of(vars), ~ recode(., "lo:129" = 0, "130:hi" = 1)))-output
var1 var2 var3 var4 var5
1 0 1 1 1 1
2 0 0 1 0 0
3 1 0 1 1 0
4 0 1 0 0 1或者,如果我们需要使用apply,则指定MARGIN以在列之间循环-2
mydata[vars] <- apply(mydata[vars], MARGIN = 2,
function(x) recode(x, "lo:129" = 0, "130:hi" = 1))数据
set.seed(24)
mydata <- as.data.frame(matrix(sample(c("lo:129", "130:hi"), 4 * 5,
replace = TRUE), ncol = 5, dimnames = list(NULL, paste0("var", 1:5))))发布于 2021-11-26 19:30:13
当您似乎希望保留129到130之间的值并将所有其他值标记为低(0)或高(1)时,Recode会将特定值映射到其他特定值。从你的例子中很难判断,因为输入是否是整数是不确定的。您可以使用if-then或case_when逻辑轻松完成此操作。这里有一个快速的解决方案,可以让你上手。
library(purrr)
df <- data.frame(var1=runif(10, min = 128, max = 131),
var2=runif(10, min = 128, max = 131))
n <- df %>% map_dfc(~ case_when(. <= 129 ~ 0, . >= 130 ~ 1, T ~ .))如果输入都是整数,您可以简单地删除case_when语句中的最后一个子句,因为它永远不会为真。
https://stackoverflow.com/questions/70127586
复制相似问题