如何解决当另一列值高于 R 中的阈值时替换列的特定部分
我有一个数据框,例如;
COL1 COL2
Canis_lupus1 10
Cattus_cattus2 10
Betta_splendes3 30
Rattus_domesticus_norvegicus3 20
Canis_lupus_OK 90
Betta_splendes32 54
Canis_lupus_lupus 18
我想在 COL1
中将每个 Canis_lupus 内容替换为:homo_sapiens
when COL2 is < 20
那我应该得到:
COL1 COL2
Homos_sapiens1 10
Cattus_cattus2 10
Betta_splendes3 30
Rattus_domesticus_norvegicus3 20
Canis_lupus_OK 90
Betta_splendes32 54
Homo_sapiens_lupus 18
这里是df:
structure(list(COL1 = structure(c(5L,6L,1L,7L,4L,2L,3L),.Label = c("Betta_splendes3","Betta_splendes32","Canis_lupus_lupus","Canis_lupus_OK","Canis_lupus1","Cattus_cattus2","Rattus_domesticus_norvegicus3"),class = "factor"),COL2 = c(10L,10L,30L,20L,90L,54L,18L)),class = "data.frame",row.names = c(NA,-7L))
解决方法
您可以使用以下解决方案:
library(dplyr)
library(stringr)
library(purrr)
df %>%
mutate(COL1 = map2(COL1,COL2,~ ifelse(str_detect(.x,"Canis_lupus") & .y < 20,str_replace(.x,"Canis_lupus","homo_sapiens"),.x)))
COL1 COL2
1 homo_sapiens1 10
2 Cattus_cattus2 10
3 Betta_splendes3 30
4 Rattus_domesticus_norvegicus3 20
5 Canis_lupus_OK 90
6 Betta_splendes32 54
7 homo_sapiens_lupus 18
,
使用data.table
,在i
中指定条件,并使用sub
将'COL1'中的子串'Canis_lupus'替换为'Homo_sapiens'
library(data.table)
setDT(df)[COL2 < 20,COL1 := sub("Canis_lupus","Homo_sapiens",COL1)]
-输出
df
COL1 COL2
1: Homo_sapiens1 10
2: Cattus_cattus2 10
3: Betta_splendes3 30
4: Rattus_domesticus_norvegicus3 20
5: Canis_lupus_OK 90
6: Betta_splendes32 54
7: Homo_sapiens_lupus 18
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。