如何在 r 中将数值转换为二进制(使用阈值)?
How to convert numeric values to binary (using a threshold) in r?
我想知道如何将 r 中的数据帧值从数字转换为二进制。
数据框:
> head(predictionDB)
TargetVar X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13
1 0 0.00 0.00000000 0 0.0000000 0.00000000 0.06666667 0.06666667 0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.4666667
2 0 0.00 0.00000000 0 0.1212121 0.09090909 0.00000000 0.00000000 0.0000000 0.0000000 0.1818182 0.0 0.2727273 0.1818182
3 0 0.00 0.00000000 0 0.0000000 0.00000000 0.00000000 0.00000000 0.0000000 1.0000000 0.0000000 0.0 0.0000000 0.0000000
4 0 0.25 0.00000000 0 0.0000000 0.00000000 0.25000000 0.00000000 0.0000000 0.0000000 0.0000000 0.0 0.2500000 0.0000000
5 0 0.00 0.09090909 0 0.0000000 0.04545455 0.04545455 0.00000000 0.2727273 0.2272727 0.0000000 0.0 0.0000000 0.3181818
6 1 0.10 0.00000000 0 0.0000000 0.00000000 0.00000000 0.00000000 0.0000000 0.5000000 0.0000000 0.1 0.3000000 0.0000000
目标:
> head(predictionDB)
TargetVar X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13
1 0 0 0 0 0 0 1 1 0 0 0 0 0 1
2 ...
非常感谢!
你可以这样做:
data.frame(df[1], (df[-1] > 0) * 1)
TargetVar X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13
1 0 0 0 0 0 0 1 1 0 0 0 0 0 1
2 0 0 0 0 1 1 0 0 0 0 1 0 1 1
3 0 0 0 0 0 0 0 0 0 1 0 0 0 0
4 0 1 0 0 0 0 1 0 0 0 0 0 1 0
5 0 0 1 0 0 1 1 0 1 1 0 0 0 1
6 1 1 0 0 0 0 0 0 0 1 0 1 1 0
这里有 5 种方法。
第一个:
predictionDB[-1] <- +(predictionDB[-1] > 0)
第二个:
predictionDB[-1] <- (predictionDB[-1] > 0) + 0L
第三个:
predictionDB[-1] <- (predictionDB[-1] > 0)*1L
第四个:
predictionDB[-1] <- as.integer(predictionDB[-1] > 0)
第五名:
predictionDB[-1] <- ifelse(predictionDB[-1] > 0, 1, 0)
有一次我 运行 测试,第一个似乎是最快的,但略有不同。但这仅适用于大型数据集。
第 5 个 ifelse
始终较慢,无论数据集大小。
数据。
predictionDB <- read.table(text = "
TargetVar X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13
1 0 0.00 0.00000000 0 0.0000000 0.00000000 0.06666667 0.06666667 0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.4666667
2 0 0.00 0.00000000 0 0.1212121 0.09090909 0.00000000 0.00000000 0.0000000 0.0000000 0.1818182 0.0 0.2727273 0.1818182
3 0 0.00 0.00000000 0 0.0000000 0.00000000 0.00000000 0.00000000 0.0000000 1.0000000 0.0000000 0.0 0.0000000 0.0000000
4 0 0.25 0.00000000 0 0.0000000 0.00000000 0.25000000 0.00000000 0.0000000 0.0000000 0.0000000 0.0 0.2500000 0.0000000
5 0 0.00 0.09090909 0 0.0000000 0.04545455 0.04545455 0.00000000 0.2727273 0.2272727 0.0000000 0.0 0.0000000 0.3181818
6 1 0.10 0.00000000 0 0.0000000 0.00000000 0.00000000 0.00000000 0.0000000 0.5000000 0.0000000 0.1 0.3000000 0.0000000
", header = TRUE)
我想知道如何将 r 中的数据帧值从数字转换为二进制。
数据框:
> head(predictionDB)
TargetVar X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13
1 0 0.00 0.00000000 0 0.0000000 0.00000000 0.06666667 0.06666667 0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.4666667
2 0 0.00 0.00000000 0 0.1212121 0.09090909 0.00000000 0.00000000 0.0000000 0.0000000 0.1818182 0.0 0.2727273 0.1818182
3 0 0.00 0.00000000 0 0.0000000 0.00000000 0.00000000 0.00000000 0.0000000 1.0000000 0.0000000 0.0 0.0000000 0.0000000
4 0 0.25 0.00000000 0 0.0000000 0.00000000 0.25000000 0.00000000 0.0000000 0.0000000 0.0000000 0.0 0.2500000 0.0000000
5 0 0.00 0.09090909 0 0.0000000 0.04545455 0.04545455 0.00000000 0.2727273 0.2272727 0.0000000 0.0 0.0000000 0.3181818
6 1 0.10 0.00000000 0 0.0000000 0.00000000 0.00000000 0.00000000 0.0000000 0.5000000 0.0000000 0.1 0.3000000 0.0000000
目标:
> head(predictionDB)
TargetVar X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13
1 0 0 0 0 0 0 1 1 0 0 0 0 0 1
2 ...
非常感谢!
你可以这样做:
data.frame(df[1], (df[-1] > 0) * 1)
TargetVar X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13
1 0 0 0 0 0 0 1 1 0 0 0 0 0 1
2 0 0 0 0 1 1 0 0 0 0 1 0 1 1
3 0 0 0 0 0 0 0 0 0 1 0 0 0 0
4 0 1 0 0 0 0 1 0 0 0 0 0 1 0
5 0 0 1 0 0 1 1 0 1 1 0 0 0 1
6 1 1 0 0 0 0 0 0 0 1 0 1 1 0
这里有 5 种方法。
第一个:
predictionDB[-1] <- +(predictionDB[-1] > 0)
第二个:
predictionDB[-1] <- (predictionDB[-1] > 0) + 0L
第三个:
predictionDB[-1] <- (predictionDB[-1] > 0)*1L
第四个:
predictionDB[-1] <- as.integer(predictionDB[-1] > 0)
第五名:
predictionDB[-1] <- ifelse(predictionDB[-1] > 0, 1, 0)
有一次我 运行 测试,第一个似乎是最快的,但略有不同。但这仅适用于大型数据集。
第 5 个 ifelse
始终较慢,无论数据集大小。
数据。
predictionDB <- read.table(text = "
TargetVar X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13
1 0 0.00 0.00000000 0 0.0000000 0.00000000 0.06666667 0.06666667 0.0000000 0.0000000 0.0000000 0.0 0.0000000 0.4666667
2 0 0.00 0.00000000 0 0.1212121 0.09090909 0.00000000 0.00000000 0.0000000 0.0000000 0.1818182 0.0 0.2727273 0.1818182
3 0 0.00 0.00000000 0 0.0000000 0.00000000 0.00000000 0.00000000 0.0000000 1.0000000 0.0000000 0.0 0.0000000 0.0000000
4 0 0.25 0.00000000 0 0.0000000 0.00000000 0.25000000 0.00000000 0.0000000 0.0000000 0.0000000 0.0 0.2500000 0.0000000
5 0 0.00 0.09090909 0 0.0000000 0.04545455 0.04545455 0.00000000 0.2727273 0.2272727 0.0000000 0.0 0.0000000 0.3181818
6 1 0.10 0.00000000 0 0.0000000 0.00000000 0.00000000 0.00000000 0.0000000 0.5000000 0.0000000 0.1 0.3000000 0.0000000
", header = TRUE)