我想在R中做一个特殊类型的虚拟编码程序。基本上,我想要一个查看序数变量的每个级别并按顺序编码的函数。 这就是我需要的:

Variable_1 --> Variable_1a  Variable_1b  Variable_1c
1               1            0            0
1               1            0            0
2               1            1            0
2               1            1            0
3               1            1            1
3               1            1            1

我可以使用ifelse语句手动执行此操作,但必须有一种更简单的方法。

#1楼 票数:3

这里有一种方式:

x <- c(1,1,2,2,2,3,3)
cbind(x,sapply(unique(x),function(y)ifelse(x>=y,1,0)))

# [1,] 1 1 0 0
# [2,] 1 1 0 0
# [3,] 2 1 1 0
# [4,] 2 1 1 0
# [5,] 2 1 1 0
# [6,] 3 1 1 1
# [7,] 3 1 1 1

#2楼 票数:3

其他方式:

#simulate your variable
set.seed(1)
var1 <- sample(1:3,10,replace=T)
#initialise the matrix and set the colnames
res <- matrix(0,nrow=length(var1),ncol=max(var1))
colnames(res) <- paste0("Variable_1",letters[1:max(var1)])
#set the 1 elements
res[cbind(rep(1:length(var1),var1),unlist(lapply(var1,seq_len)))] <- 1

#3楼 票数:3

x <- c(1,1,2,2,2,3,3)
sapply(1:max(x),`<=`,x)*1
#      [,1] [,2] [,3]
# [1,]    1    0    0
# [2,]    1    0    0
# [3,]    1    1    0
# [4,]    1    1    0
# [5,]    1    1    0
# [6,]    1    1    1
# [7,]    1    1    1

#4楼 票数:2 已采纳

这是使用model.matrix的另一个答案(假设你的变量是x ):

x <- c(1,1,2,2,3,3)
m <- model.matrix(~ 0 + factor(x))
for(i in 1:nrow(m)) m[i, 1:max.col(m, ties.method = "last")[i]] <- 1
m
#    factor(x)1 factor(x)2 factor(x)3
# 1           1          0          0
# 2           1          0          0
# 3           1          1          0
# 4           1          1          0
# 5           1          1          1
# 6           1          1          1
# attr(,"assign")
# [1] 0 1 1
# attr(,"contrasts")
# attr(,"contrasts")$`factor(x)`
# [1] "contr.treatment"

反过来可能有点复杂:

m <- model.matrix(~ 0 + factor(x))
m <- m[,ncol(m):1]
for(i in 1:nrow(m)) m[i, 1:max.col(m, ties.method = "last")[i]] <- 1
m[,ncol(m):1]
#   factor(x)1 factor(x)2 factor(x)3
# 1          1          1          1
# 2          1          1          1
# 3          0          1          1
# 4          0          1          1
# 5          0          0          1
# 6          0          0          1

  ask by RH2015 translate from so

未解决问题?本站智能推荐:

1回复

在R中执行JavaScript代码的特殊字符

我尝试执行在JS控制台中运行的javascript行,它是这样的: 我尝试将其与以下脚本一起使用: 我应该使用的性格有什么不同吗?
3回复

RShiny:在verbatimTextOuput中编写R代码是否有特殊字体?

我正在写一个Shinyapp,它在verbatimTextOutput环境中显示一些R代码,我想知道是否有一种方法可以在Rstudio显示它时显示该代码(例如,在标签后面加上绿色字体)。 我知道可以用CSS更改字体(即使我不知道怎么做),但是有没有像Rstudio那样自动显示代码的“包”?
1回复

根据R中的二进制代码定义虚拟变量

从医院获取以下患者数据示例。 我想引入一个虚拟变量$PAIR_IDENTIFIER ,它在每次出现新的sex==1都采用一个新值。 问题在于sex变量没有固定的模式。 您会看到有时后一个1出现在ith+2位置,然后出现在ith+2位置, ith+3 。 因此$PAIR_IDENTI
2回复

R中的特殊合并

我有一个包含大量行和列的数据框,但是对于这个特定的练习,我只需要两列用于该数据框。 例如,我有这个: 我有另一个数据框,也有很多行和列,但我只需要三列: 我需要做的是按ID合并两个数据框,但是有一个额外的列告诉我每个数据的百分比,如果没有找到则放零,如下所示: 也许这不是完全合并,
2回复

R中的虚拟变量

我正在构建一个线性模型,以评估距栖息地边界的距离对昆虫数量的影响。 使用的设备存在一些差异,因此我将设备作为分类变量包括在内,以确保它不会对丰富度产生重大影响。 类别因子为3级,因此我要求r通过使用以下代码在lm中生成虚拟变量: 当我要求模型的摘要时,我可以看到两个级别及其系数。 我
1回复

R中的特殊任务

我的问题只是为了了解 R 语言的一项功能是如何工作的。 在任何好的 R 版本附带的“R 语言定义”中,有一些内容解释了例如向量元素的设置如何与看起来像赋值但并不那么简单的东西一起工作: 是一个快捷方式: 我不明白的是为什么使用中间符号*tmp*而不是直接用 setter 函数来做这件事的原因。 到现
2回复

在R中创建特殊矩阵

我有一个如下的矩阵。 我想创建四个矩阵(5 * 4),每个矩阵列通过自身相乘得到,然后每对行值res1 =(m1 * m1,m1 * m2,m1 * m3,m1 * m4),res2 =( m1 * m2,m2 * m2,m2 * m3,m2 * m4),res3 =(mm1 * m3,m2
2回复

R中的特殊字符

我正在努力将对话的成绩单读入R。但是我遇到了一些特殊字符,例如卷曲引号en和破折号等。通常,我首先在Microsoft产品中用replace替换这些特殊字符。 通常,我用纯文本替换特殊字符,但在某些情况下希望将它们替换为其他字符(即,我用{}替换“”)。 这是乏味的,并不总是彻底的。 如果