从虚拟变量中最简单地创建因子变量

2023-12-03

此处问题的选定答案:

使用 dplyr 创建因子变量?

没有给哈德利留下深刻的印象,后续的答案并不能很好地概括我遇到的一些问题。我想知道社区是否可以通过一个更简单的示例做得更好:

  ### DATA ###
A = round(runif(200,0,1),0)
B = c(1 - A[1:100],rep(0,100))
C = c(rep(0,100), 1 - A[101:200])

dummies <- as.data.frame(cbind(A,B,C))
header <- c("Christian", "Muslim", "Athiest")

names(dummies) <- header

### ONE WAY ###
dummies$Religion <- factor(ifelse(dummies$Christian==1, "Christian",
                            ifelse(dummies$Muslim==1, "Muslim",
                                   ifelse(dummies$Athiest==1, "Athiest", NA))))

解决方案模仿上面链接中提供给OP的结果。是否有一个更简单的函数可以将虚拟变量折叠为一个因子变量,就像 STATA 中的 egen 组函数那样?简单的一件衬里就很棒了。

使用Akrun的解决方案和系统时间(谢谢):

set.seed(24)
A = round(runif(2e6,0,1),0)
B = c(1 - A[1:1e6],rep(0,1e6))
C = c(rep(0,1e6), 1 - A[1000001:2000000])

dummies <- as.data.frame(cbind(A,B,C))
header <- c("Christian", "Muslim", "Athiest")

names(dummies) <- header
attach(dummies)



#Alistaire
system.time({
  dummies %>% rowwise() %>% 
    transmute(religion = names(.)[as.logical(c(Christian, Muslim, Athiest))])
})
# user  system elapsed 
# 56.08    0.00   56.08 

system.time({
  dummies %>% transmute(religion = case_when(
    as.logical(Christian) ~ 'Christian', 
    as.logical(Muslim) ~ 'Muslim', 
    as.logical(Athiest) ~ 'Atheist'))
})
# user  system elapsed 
# 0.22    0.04    0.27 



#Curt F.
system.time({
  dummies %>% 
    gather(religion, is_valid) %>% 
    filter(is_valid == T) %>%
    select(-is_valid)
})
# user  system elapsed 
# 0.33    0.03    0.36 




#Akrun
system.time({
  names(dummies)[as.matrix(dummies)%*% seq_along(dummies)]
})
# user  system elapsed 
# 0.13    0.06    0.21 

system.time({
  names(dummies)[max.col(dummies, "first")]
})
# user  system elapsed 
# 0.04    0.07    0.11 

我发现 Akrun 的解决方案是最快的方法,并且提供了 2 个单行代码。然而,非常感谢其他人对问题的独特方法和慷慨提供的编码方法,我想了解更多,特别是使用%%, names(.), is_valid和 qdapTools 包。


使用 dplyr 的快速方法是

dummies %>% rowwise() %>% 
    transmute(religion = names(.)[as.logical(c(Christian, Muslim, Athiest))])

哈德利在这个答案中真正抱怨的是嵌套的ifelse不过,结构。他建造了case_when替换它:

dummies %>% transmute(religion = case_when(
    as.logical(Christian) ~ 'Christian', 
    as.logical(Muslim) ~ 'Muslim', 
    as.logical(Athiest) ~ 'Atheist'))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从虚拟变量中最简单地创建因子变量 的相关文章

  • 您使用 Attach() 或按名称或切片调用变量吗?

    许多介绍 R 的书籍和指南都是从附加一个 R 语言的实践开始的 data frame这样您就可以通过名称调用变量 我一直发现用以下方式调用变量是有利的 符号或方括号切片 2 这样我就可以使用多个data frames 而不混淆它们和 或使用
  • 循环遍历列并将字符串长度添加为新列

    我有一个包含多列的数据框 并且希望为每个列输出一个单独的列 其中包含每行的长度 我试图迭代列名称 并为每列输出一个附加有 length 的相应列 例如 col1 col2 将转到 col1 列2 col1 长度 列2 长度 我正在使用的代码
  • lme4:如何指定 2 个与随机截距的相关性,而不添加随机斜率之间的相关性

    重新发布自stats stackexchange com https stats stackexchange com q 195385 33560 我试图在 R 的 lme4 包中指定一个模型 其中随机截距和随机斜率之间有 2 个相关性 但
  • 评估 R 中字符串指向的函数

    假设我有以下内容 x lt 1 10 squared lt function x x 2 y lt squared 我希望能够使用 y 定义的字符串来评估该函数 像 eval y 这样的东西 我知道这是错误的 但会返回 1 1 4 9 16
  • 将线条剪裁到绘图区域并在绘图区域外显示文本

    我想限制绘图的可见 y 范围 为了保留超出此范围的值 我需要设置oob 出界 to rescale none这效果很好 不过 我还想在图外的页边空白处添加一些文本 为了做到这一点 我需要关闭剪辑 这会导致超出范围的值被绘制在绘图区域之外的边
  • R:使用 dcast 时包含没有条目的因子

    我在数据帧上使用 reshape2 函数 dcast 其中一个变量是某些级别未出现在数据框中的因素 但我会将所有值包含在创建的新列中 例如 假设我运行以下命令 library reshape2 dataDF lt data frame id
  • corr.test 与 cor.test p 值

    我正在尝试使用 psych 包 psych 1 6 9 中的 corr test 但在使用 method spearman 时 它似乎给出了与 cor test 不同的 p 值 相关系数相同 但 p 值不同 我整理了一些示例代码和输出 如下
  • 如何在闪亮的应用程序中显示矩阵,并用条件指定颜色?

    我有一个具有正值和负值的矩阵 M 我正在尝试使用 DT 包在闪亮的应用程序中显示为表格 我想用不同的颜色显示矩阵 红色的正数和负数 例如 到目前为止 我只能以一对一的方式添加颜色 但我想以这种方式添加颜色 如果matrix values g
  • Rblpapi - 将 bdp 与 ISIN / Cusip 一起使用会出现错误

    当我将 bdp 与 ISIN 或 CUSIP 一起使用时 出现以下错误 bdp US25470XAB10 ISIN ULT PARENT TICKER EXCHANGE bdp 25470XAB1 CUSIP ULT PARENT TICK
  • 如何重试错误语句?

    如果某个语句出错 我如何简单地告诉 R 重试该语句几次 例如 我希望做类似的事情 tryCatch dbGetQuery Query database error function e if is locking error e If da
  • ts(x) 中的错误:“ts”对象必须有一个或多个观察结果

    当我使用进行预测时forecast库 我注意到以下代码没有按预期运行 library forecast library dplyr df1 lt data frame gp gl 20 5 dt seq 1 100 get lt funct
  • 如何在shell脚本中运行R代码?

    我有一个 R 文件 myfile R 我想使用 shell 脚本来运行它 我怎样才能做到这一点 我试过这个 bin bash Rscript myfile R 但它给了我这个错误 Rscript 找不到命令 我也尝试过这个 bin bash
  • 将一个大的 xlsx 文件导入到 R 中?

    我想知道是否有人知道从 大 xlsx 文件 20Mb 导入数据的方法 我尝试使用 xlsx 和 XLConnect 库 不幸的是 两者都使用 rJava 我总是收到相同的错误 gt library XLConnect gt wb lt lo
  • 将英寸高度的字符向量转换为厘米?

    我得到一个字符向量 tibble H c 6 2 5 10 5 5 5 1 5 5 5 4 我想将其转换为厘米 请告知我该怎么做 有几种方法可以使用 1 阅读与fread粘贴到单个字符串后 library data table fread
  • ggplot2:图例中的斜体

    我正在尝试编辑图例中的标签 以便第一个标签 WT 为纯文本 而后续 7 个标签为斜体 我一直在使用element text face c plain rep italic 7 但这导致没有任何标签被转换为斜体 我有点困惑为什么它不起作用 因
  • 通过排列进行多组测试

    我有一个 df 其中包含与两个实验相关的两组值 value 1 和 value 2 一个实验包含两组 0 和 1 另一个实验包含三组 0 1 2 test group Value 1 Value 2 AA 0 15 1 11 2 AA 0
  • 在 R 中高效加载稀疏矩阵

    我在将数据有效加载到 R 中的稀疏矩阵格式时遇到问题 这是我当前策略的 不完整 示例 library Matrix a1 Matrix 0 5000 100000 sparse T for i in 1 5000 a1 i idxOfCol
  • 动态显示仪表板页面

    我有一个实用的闪亮应用程序 它使用shinydashboard包裹 新功能需要特定于用户的行为 例如 针对不同的用户名使用不同的数据集 因此我打算 显示登录表单 验证凭据并设置反应值LoggedIn to true如果成功的话 显示实际情况
  • R 中的微秒时间戳

    在 CSV 文件中 我有几列 其中一列有时间戳 其中每个时间戳是今天午夜经过的微秒 每个 csv 文件仅包含一天内的数据 因此这并不含糊 我的问题是 如何将这些微秒时间戳解析为 R 多谢 我的 CSV 文件的一部分 34201881666
  • 修改x轴刻度标签

    我正在尝试更改由生成的箱线图的 x 轴刻度标签ggplot2 x 轴是一个分类变量 HabFac 我想要的是将其刻度更改为 6 个化学品 A E 下面是我的代码 raw data read table Read data p TT ggpl

随机推荐

  • OpenGL:将 VBO 与 std::vector 结合使用

    我正在尝试加载一个对象并使用 VBO 和 glDrawArrays 来渲染它 问题是像这样的简单浮点指针float f 在我的情况下不起作用 因为我超过了该指针可以存储的值的限制 所以我的解决方案是使用向量 而且它不起作用 这是我的代码 u
  • 在 .NET Winforms 应用程序中保存设置[重复]

    这个问题在这里已经有答案了 可能的重复 存储 NET 应用程序的用户设置的最佳方式是什么 我发现了很多关于如何从 Winforms 应用程序保存应用程序设置 每个用户 的非常不同的示例 我想在 C 中执行此操作的正确方法非常简单 希望有人能
  • 在单个 DataGridView 单元格中设置两种颜色的文本

    我的 C Windows 应用程序中有一个数据网格视图 我需要更改单元格中最后 5 个字符的颜色 但我不知道该怎么做 我在 CellPainting 事件中有此代码 但不起作用 private void dgvSorteados CellP
  • 如何使用ajax调用将对象传递给控制器

    我想将一个对象传递给控制器 并检索控制器中的值 我的定义如下 网页代码 var positionarray JavaScript button live click function positionarray push id sessio
  • 在 C 中从字符串调用函数

    在 C 中 如何通过名称作为字符串来调用函数 我有这个 int main int argc const char argv char events test test2 int i 0 for i lt 2 i char event eve
  • 如何在 Android 内部存储上创建文件?

    我想将内部存储上的文件保存到特定文件夹中 我的代码是 File mediaDir new File media if mediaDir exists mediaDir createNewFile mediaDir mkdir File f
  • 从 DOM 中删除 HTMLCollection 元素

    我有一个段落元素的集合 有些是空的 有些只包含空格 而另一些则有内容 p Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpi
  • 如何构建新的 ASP MVC 应用程序?

    我需要启动一个新的 mvc 项目 并且一如既往地我有关于 ASP 身份的问题 永远不知道把它放在哪里 我计划像这样组织解决方案 ProjectWebUI 具有 asp 身份框架的 mvc 应用程序 由具有身份验证的互联网模板制成 Proje
  • Racket 流会记住它们的元素吗?

    当从无限流中计算大量数字时 Racket 是否使用记忆 因此 举例来说 如果我打印 也称为计算并显示 无限整数流上的前 400 个数字 1 2 3 399 400 就在我要求打印这个无限流上的前 500 个数字之后 第二组计算会使用记忆吗
  • Laravel 迁移更改使列可以为空

    我创建了一个未签名的迁移user id 我怎样才能编辑user id在新的迁移中也能做到这一点nullable Schema create throttle function Blueprint table table gt increme
  • 在iOS应用程序中使用本地视频文件(xcode)

    我正在寻找在 iOS 应用程序中播放视频文件的最佳方式 我的应用程序目前正在开发中 将有大约 50 个视频 每个视频长 30 秒 和简短教程 如果可能的话 我希望它们全部在本地 这样用户就可以在没有互联网连接时观看视频 我在堆栈溢出上找不到
  • 如何使用AspectJ修改返回对象的属性?

    我有一个如下所示的类 来自 Spring Roo DataOnDemand 它返回一个新的瞬态 非持久化 对象以用于单元测试 这就是我们从 Spring Roo 的 ITD 进行推送后的代码 public class MyObjectOnD
  • 错误:java.lang.ClassNotFoundException:更新 android studio 3.0.0 时未找到类 org.openjdk.jdi.ReferenceType

    我已将我的项目从 2 2 3 迁移到稳定的 android studio 3 0 0 并设置 jdk 1 8 现在我们运行该应用程序 我正进入 状态 以下例外 Error java lang ClassNotFoundException C
  • jquery .each() .load() 等待完成

    我正在使用 jquery 将行加载到表中 我想知道如何使它们一一加载 即 只有在第一个块完成加载后 第二个块才应开始加载 我的桌子看起来有点像这样 table thead tr th Heading th tr thead tbody tb
  • 无法在 Xcode 6.1 中存档正在运行的 6.0.1 Swift 项目/分段错误:11

    由于信号导致命令失败 分段错误 11 在 Users thedude Documents Repositories MyProject Data swift 258 36 line 258 56 RangeText UILocalNotif
  • 调试 winform 崩溃 - C# [ADPlus + Windbg]

    System AccessViolationException was unhandled Message Attempted to read or write protected memory This is often an indic
  • 无法从 MSR 读回

    我正在编写一个内核模块 它是关于读写 MSR 的 我写了一个简单的程序进行测试 但仍然失败 它所做的就是写入 MSR 然后读回 这是代码 static int init test3 init void uint32 t hi lo hi 0
  • 从另一个类中的 JPanel 文本字段获取值

    I have JPanel使用文本框 在另一个面板中保存按钮 如果我点击保存按钮 我必须获取第一个面板文本框值 如何访问它 只需将 TextField 设置为公共静态数据即可 然后你可以使用 ClassName TextFiledName
  • .net FlagsAttribute 枚举是否需要手动赋值?

    为了允许在显示新闻故事的方法上使用不同的格式选项 我创建了一个可以传入的枚举来指定它的显示方式 Flags private enum NewsStyle Thumbnail 0 Date 1 Text 2 Link 4 All 8 stri
  • 从虚拟变量中最简单地创建因子变量

    此处问题的选定答案 使用 dplyr 创建因子变量 没有给哈德利留下深刻的印象 后续的答案并不能很好地概括我遇到的一些问题 我想知道社区是否可以通过一个更简单的示例做得更好 DATA A round runif 200 0 1 0 B c