R语言 csv新增一列 dplyr操作
下面把这段只有 7 行的代码逐行、逐符号拆开讲,保证你以后遇到类似的“根据某列内容生成新标签”任务,可以直接套模板。
1. 读进来的数据长啥样?
phe
已经是 tibble(一种加强版数据框),其中有一列叫
histologic type:ch1
(注意列名里有空格和冒号,所以必须用反引号 `
包裹)。
geo_accession | histologic type:ch1 | …其他列… |
---|---|---|
GSM816546 | adenocarcinoma | … |
GSM816554 | large cell neuroendocrine carcinoma | … |
GSM816559 | small 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_accession | histologic type:ch1 | class |
---|---|---|
GSM816546 | adenocarcinoma | PC |
GSM816554 | large cell neuroendocrine carcinoma | NEPC |
GSM816559 | small cell carcinoma | NEPC |
5. 模板化记忆
以后任何“根据某列内容打标签”的任务,直接套下面骨架:
df <- df %>%mutate(新列 = case_when(旧列 == "A" ~ "标签1",旧列 %in% c("B","C") ~ "标签2",TRUE ~ NA_character_))
把 df
、旧列
、新列
、标签*
换成你自己的名字即可。