首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过在R中组合mutate和case_when来创建新变量

基础概念

mutatecase_when 是 R 语言中 dplyr 包中的两个函数,用于数据框(data frame)的操作。

  • mutate:用于在数据框中创建新的变量或修改现有变量。
  • case_when:用于根据条件创建新的变量,类似于其他编程语言中的 switchif-else 语句。

相关优势

  1. 可读性强case_when 提供了一种清晰的方式来表达复杂的条件逻辑,使得代码更易读。
  2. 灵活性高:可以轻松地组合多个条件来创建新的变量。
  3. dplyr 包集成dplyr 包提供了许多用于数据操作的函数,mutatecase_when 是其中的两个重要函数,与其他 dplyr 函数(如 filterarrange 等)配合使用非常方便。

类型

  • 基本类型mutatecase_when 可以处理数值、字符、逻辑等基本数据类型。
  • 复杂类型:可以结合其他函数处理更复杂的数据类型,如日期时间、因子等。

应用场景

  1. 数据转换:根据某些条件对数据进行转换或计算新变量。
  2. 数据清洗:处理缺失值、异常值等。
  3. 数据分析:根据条件对数据进行分组或分类,便于后续分析。

示例代码

假设我们有一个数据框 df,包含以下列:age(年龄)、gender(性别)、income(收入)。我们想创建一个新的变量 income_level,根据收入水平进行分类。

代码语言:txt
复制
library(dplyr)

# 创建示例数据框
df <- data.frame(
  age = c(25, 35, 45, 55),
  gender = c("M", "F", "M", "F"),
  income = c(30000, 60000, 90000, 120000)
)

# 使用 mutate 和 case_when 创建新变量
df <- df %>%
  mutate(income_level = case_when(
    income < 50000 ~ "Low",
    income >= 50000 & income < 100000 ~ "Medium",
    income >= 100000 ~ "High"
  ))

# 查看结果
print(df)

可能遇到的问题及解决方法

  1. 条件逻辑错误:确保 case_when 中的条件逻辑正确无误。
    • 解决方法:仔细检查每个条件的边界值和逻辑关系。
  • 数据类型不匹配case_when 中的返回值类型应与目标列的数据类型一致。
    • 解决方法:确保返回值的类型与目标列的数据类型匹配,必要时使用 as.character()as.numeric() 等函数进行类型转换。
  • 性能问题:对于大数据集,复杂的条件逻辑可能导致性能下降。
    • 解决方法:尽量简化条件逻辑,避免不必要的计算;可以考虑使用 data.table 等更高效的数据处理包。

参考链接

通过以上内容,你应该能够理解如何在 R 中使用 mutatecase_when 创建新变量,并解决可能遇到的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

听说WGCNA官网崩了?那还能做基因共表达分析吗?

主要的变异来源是发育阶段、组织和重复样本。我通常会制作一个汇总表来指导我的下游分析: 发育阶段可以作为数值变量或定性变量进行分析。 现在我们了解了实验设计,接下来我们将确定实验中变异的主要驱动因素。...换句话说,在发育阶段和组织之间,哪个因素对实验中的变异贡献更大?这个问题的答案对于我们如何最有效地可视化数据至关重要。 获得实验全局视图的一个好方法是进行主成分分析(PCA)。...y轴(PC3)明显区分了种子和所有其他东西。 因此,在变异贡献方面,解剖方法 > 阶段 > 组织。我们将使用这些信息来指导下游的可视化。...在实际分析中需要包含更多的基因,但是相关性分析中的基因越多,速度就会越慢。...= to) %>% mutate(t = r*sqrt((number_of_tissue_stage-2)/(1-r^2))) %>% mutate(p.value = case_when

19610

R&Python Data Science 系列:数据处理(2)

1 衍生字段函数 主要有两个函数,mutate()和transmute(),两个函数在Python和R上使用方法相同,这两个函数本身有点区别:mutate()函数保留原来所有列,然后新增一列;transmute...2 条件函数 这里介绍3个条件函数,if_else()、case_when()、between()函数,Python包dfply和R包dplyr中都是这3个函数,在用法上有点细微差别,日常中使用最多...R语言实现 ##如果钻石价格大于2000,则钻石等级为A,1500-2000为B, 1000-1500以下为C,1000以下为D diamonds %>% mutate(price_class = case_when...注意:case_when函数在Python和R语言中使用的时候有点区别,请留意。...注意:R语言中可以使用XXX_join(a,b,by),Python中不可以使用。

77510
  • 数据处理第2节:将列转换为正确的形状

    转换列:基础部分 您可以使用mutate()函数创建新列。 mutate中的选项几乎是无穷无尽的:你可以对普通向量做任何事情,可以在mutate()函数内完成。...mutate中的任何内容都可以是新列(通过赋予mutate新的列名),或者可以替换当前列(通过保持相同的列名)。 最简单的选项之一是基于其他列中的值的计算。...在这种情况下,您有一些选择:要么预先创建一个函数(如果它更长时间有用),或者通过将它包装在funs()或波形符中来动态创建函数。...在动态创建函数时,通常需要一种方法来引用要替换的值:这是.符号。...在这些情况下,我们必须在给出round()指令之前添加列需要为数字的条件,这可以使用mutate_if来完成。 通过使用mutate_if(),我们在管道中需要两个参数: 首先,它需要有关列的信息。

    8.1K30

    看世界杯也能学画图:R语言ggplot2画热图展示不同国家历届足球世界杯的成绩

    在twitter上看见有人分享了一个图 image.png 热图展示不同国家历届足球世界杯的成绩,非常有意思,时间跨度是1982年到2018年,入选国家的标准是最少参加过四次世界杯,我们今天来重复一下这个图...推特上这个图还没有分享示例数据和代码,我们手动把数据整理下来,代码自己来写 部分示例数据截图 image.png 最开始整理数据是直接按照图中的图例文字来标注的,想了一下用数字替代可能会更快一点,数字在读入...country,names_to = "year") %>% mutate(`Best Achievement`=case_when( value == 1 ~ 'Not Present'...country,names_to = "year") %>% mutate(`Best Achievement`=case_when( value == 1 ~ 'Not Present'...country,names_to = "year") %>% mutate(`Best Achievement`=case_when( value == 1 ~ 'Not Present'

    47420

    群体遗传三剑客第一篇:分组和不分组的PCA分析,添加解释百分比

    PCA是降维的一种方法,GWAS分析中经常作为协变量矫正群体分层,很多软件可以分析PCA,这里介绍一下使用plink软件和R语言,进行PCA分析,并且使用ggplot2绘制2D和3D的PCA图。...这里尝试从名为 plink.raw 的文件中读取数据,并将其存储在变量 m012 中。 2....计算特征值和特征向量 re = eigen(Gmat) eigen 函数用于计算矩阵的特征值和特征向量,结果存储在 re 中。 6....pca_re2 是一个新的数据框,包含前3个特征向量和个体ID iid。 pca_re2$Gen = fid 将家族ID fid 添加到 pca_re2 中。 8....使用 mutate 和 case_when 函数根据 Gen 列的值为每个个体分配颜色。 scatterplot3d 函数绘制三维散点图,指定颜色、点的形状、角度等参数。

    12610

    Fama French (FF) 三因子模型和CAPM模型分析股票市场投资组合风险收益可视化

    FF 模型通过回归除市场收益之外的几个变量的投资组合收益来扩展 CAPM。从一般数据科学的角度来看,FF 将 CAPM 的简单线性回归(我们有一个自变量)扩展到多元线性回归(我们有许多自变量)。...使用tempfile() 基础 R 中的 函数来创建一个名为 temp. 这是我们将放置压缩文件的地方。 temp <- tempfile() R 创建了一个名为的临时文件 temp 。...最后,我们只想要与我们的投资组合数据一致的 FF 因子数据,因此我们 在投资组合返回对象中 按 日期first() 和 last()日期filter()。...还将FF数据转换为十进制,并创建了一个名为R\_excess的新列,保存高于无风险利率的收益。...因此,市场因素在该模型中占主导地位,而其他两个因素的置信区间为零。 ---- 本文摘选《R语言Fama French (FF) 三因子模型和CAPM多因素扩展模型分析股票市场投资组合风险/收益可视化》

    3.9K30

    Day07 生信马拉松-数据整理中的R

    ,数据框新增一列 test mutate(test, new = Sepal.Length * Sepal.Width) #R中的修改必须要赋值,不赋值=没发生 test 2.4 连续步骤的不同方法...2.4.1 多次赋值,产生多个中间的变量 x1 = select(iris,-5) #"-5"为删除第5列 x2 = as.matrix(x1) x3 = head(x2,50) #head()为取前...ifelse(,,) x = rnorm(3) x ifelse(x>0,"+","-") ★★★★★ifelse()+str_detect(),条件筛选的王炸组合...的标度在每个版面都可以变化### ggplot2 分面相关设置(facet)详解 7.一些实操中的便捷函数 7.1 match() 函数 load("matchtest.Rdata") x y ## 把...") #列出工作目录下以.R结尾的文件 file.create("douhua.txt") #用代码创建文件 file.exists("douhua.txt") #某文件在工作目录下是否存在 file.remove

    23900

    R语言ggplot2画漂亮的环形柱形图的一个实例

    在twitter上看到一个图 image.png 配色很漂亮,代码和数据也是公开的,今天的推文来学习一下他的代码 代码来源的链接是 https://github.com/NearAndDistant/...data_science_with_r 这个链接还有很多其他的R语言ggplot2作图的例子,代码和数据都是公开的,大家自己有时间可以重复一下其中的代码 image.png 这个环形柱形图的代码是以shiny..." Level"), attribute = case_when(attribute == "Affectionate With Family" ~ "Affectionate...(id = row_number()) %>% ungroup() %>% #2 Pissaro #1 Signac mutate(fill = case_when(attribute == "...family = "serif") + theme_void() -> p2 image.png 最后来一个拼图 library(patchwork) p1+p2 image.png 示例数据和代码可以在公众号后台留言

    1.3K30

    R语言第二章数据处理⑤数据框列的转化和计算目录正文

    正文 本篇描述了如何计算R中的数据框并将其添加到数据框中。一般使用dplyr R包中以下R函数: Mutate():计算新变量并将其添加到数据表中。 它保留了现有的变量。...Transmutate():计算新列但删除现有变量。...同时还有mutate()和transmutate()的三个变体来一次修改多个列: Mutate_all()/ transmutate_all():将函数应用于数据框中的每个列。...mutate:通过保留现有变量来添加新变量,通过保留现有列来添加新列(sepal_by_petal): library(tidyverse) my_data <- as_tibble(iris) my_data...my_data %>% mutate(sepal_by_petal_l = Sepal.Length/Petal.Length) transmute:通过删除现有变量来创建新变量,删除现有列,添加新列

    4.2K20

    生信技能树- R语言-day7

    str_length(x)length(x)# 字符的个数2.字符串拆分str_split(x," ") # 把42个字符 按照“空格”拆分成八个字符串class(str_split(x," ")) #确认是什么数据组合类型...duplicated(mm)] 提取没有重复的第一次出现的mutate,数据框新增一列mutate(test, new = Sepal.Length * Sepal.Width) new是新产生的列名新加之后...多次赋值,会产生多个中间的变量x1 = select(iris,-5)x2 = as.matrix(x1)x3 = head(x2,50)pheatmap::pheatmap(x3)2....else2, ifelse(,,ifelse)在ifelse里加一个ifelse补充 case_when练习题1.加载deg.Rdata,根据a、b两列的值,按照以下条件生成向量x:load("deg.Rdata...") #列出工作目录下以.R结尾的文件file.create("douhua.txt") #用代码创建文件file.exists("douhua.txt") #某文件在工作目录下是否存在file.remove

    10400
    领券