R - 制作二进制变量的函数

标签 r dummy-variable

我有一些取值在 1 到 5 之间的变量。如果它们取值在 1 到 3(包括在内)和 1 之间,我想将它们编码为 0如果他们取值 4 或 5。

我的数据集是这样的

var1    var2        var3
1       1            NA
4       3            4
3       4            5
2       5            3

所以我希望它是这样的:

var1    var2        var3
0       0            NA
1       0            1
0       1            1
0       1            0

我试着做一个函数并调用它

making_binary <- function (var){
  var <- factor(var >= 4, labels = c(0, 1))
  return(var)
}


df <- lapply(df, making_binary)

但我有一个错误:不正确的标签:长度 2 必须是 1 或 1

我哪里错了? 非常感谢您的回答!

最佳答案

你可以使用:

df[] <- +(df == 4 | df == 5)
df
#  var1 var2 var3
#1    0    0   NA
#2    1    0    1
#3    0    1    1
#4    0    1    0

比较 df == 4 | df == 5 返回逻辑值(TRUE/FALSE),+ 这里将这些逻辑值转为整数值( >1/0) 分别。

如果您想将此应用于选定的列,您可以按位置或按名称对列进行子集化。

cols <- 1:3 #Position
#cols <- grep('var', names(df)) #Name
df[cols] <- +(df[cols] == 4 | df[cols] == 5)

就您的功能而言,您可以这样做:

making_binary <- function (var){
  var <- as.integer(var >= 4)
  #which is faster version of
  #var <- ifelse(var >= 4, 1, 0)
  return(var)
}

df[] <- lapply(df, making_binary)

数据

df <- structure(list(var1 = c(1L, 4L, 3L, 2L), var2 = c(1L, 3L, 4L, 
5L), var3 = c(NA, 4L, 5L, 3L)), class = "data.frame", row.names = c(NA, -4L))

关于R - 制作二进制变量的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62652518/

相关文章:

r - 如何使用 ggplot2 绘制网格中每对参数的成对边缘分布

r - 具有函数 "seq"- "The RHS length must either be 1 or match the LHS length exactly"的 data.table 中的错误意味着什么?

r - 如何在 R 语言中用方括号包裹 JSON?

python - 在训练和测试数据中保持相同的虚拟变量

R:基于分类变量 *of 列表 * 创建虚拟变量

r - 获取R函数的参数名称

r - 将带有多个换行符和斜体字的文本添加到 R 中的绘图中

binary-data - 这个二进制编码器的功能是如何工作的?

python - 如何创建虚拟变量然后使用 scikit-learn 进行聚合?

r - 如何根据R中两列的值创建虚拟变量?