R语言 csv新增一列 dplyr操作

下面把这段只有 7 行的代码逐行、逐符号拆开讲,保证你以后遇到类似的“根据某列内容生成新标签”任务,可以直接套模板。


1. 读进来的数据长啥样?

phe 已经是 tibble(一种加强版数据框),其中有一列叫
histologic type:ch1(注意列名里有空格和冒号,所以必须用反引号 ` 包裹)。

geo_accessionhistologic type:ch1…其他列…
GSM816546adenocarcinoma
GSM816554large cell neuroendocrine carcinoma
GSM816559small cell carcinoma

2. 代码逐字解释

phe <- phe %>%                       # 把 phe 自己重新赋值,方便后面直接用
  mutate(                            # dplyr::mutate:新增/修改列
    class = case_when(               # dplyr::case_when:多条件“如果…就…”
      `histologic type:ch1` == "adenocarcinoma" ~ "PC",
      #  ↑ 条件1                          ↑ 条件1成立时返回的值
      `histologic type:ch1` %in% c("large cell neuroendocrine carcinoma",
                                   "small cell carcinoma") ~ "NEPC",
      #  ↑ 条件2(向量匹配)                ↑ 条件2成立时返回的值
      TRUE ~ NA_character_             # 兜底:以上都不满足就给缺失值
    )
  )

3. 关键语法点

符号/函数作用
%>%管道符,把左边的结果直接送进右边函数的第一个参数,避免嵌套括号。
`histologic type:ch1`列名里有空格、冒号、连字符等,必须加反引号,否则 R 会报错。
==精确匹配单个字符串。
%in%向量匹配,一次比对多个候选字符串,返回 TRUE/FALSE。
c(...)把多个字符串拼成向量。
TRUE ~case_when 的“其他情况”写法,必须放在最后。
NA_character_字符型缺失值,与数值型 NA 区分。

4. 执行完的效果

原表多了 1 列 class,内容只有两种:

geo_accessionhistologic type:ch1class
GSM816546adenocarcinomaPC
GSM816554large cell neuroendocrine carcinomaNEPC
GSM816559small cell carcinomaNEPC

5. 模板化记忆

以后任何“根据某列内容打标签”的任务,直接套下面骨架:

df <- df %>%
  mutate(新列 = case_when(
    旧列 == "A"          ~ "标签1",
    旧列 %in% c("B","C") ~ "标签2",
    TRUE                 ~ NA_character_
  ))

df旧列新列标签* 换成你自己的名字即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值