繁体   English   中英

如何根据特定字符串在 R 数据框的另一列中的出现来替换字符列的值?

[英]How to replace values of a character column based on the occurrence of specific strings in another column of an R data frame?

我正在努力替换数据框特定行的字符串。

在这个例子中, class1列有错误,因此我需要更改两个物种类。

这是我的代码:

class1 <- c("Sarcopterygii", "Actinopterygii", "Actinopterygii", 
            "Actinopterygii", "Actinopterygii", "Actinopterygii", 
            "Actinopterygii", "Insecta", "Insecta")

Species1 <-c("Protopterus aethiopicus","Synodontis ruandae",
             "Synodontis afrofischeri", "Hyperolius cinnamomeoventris", 
             "Schilbe intermedius", "Hoplobatrachus occipitalis",
             "Raiamas salmolucius","Trithemis pluvialis","Trithemis donaldsoni")

count1 <- c(12, 2, 32, 4, 6, 7, 8, 13, 10)

Dataset1 <- data.frame(class1, Species1, count1)

我想将"Actinopterygii"属替换为"Hyperolius cinnamomeoventris"物种的"Amphibia" ,并对"Hoplobatrachus occipitalis"物种进行同样的操作

我不确定是否理解您的目标,但这是dplyr::case_when的主要思想

library(dplyr)
Dataset1 %>% 
  mutate(class1 = case_when(class1 == "Actinopterygii" ~ "Hyperolius cinnamomeoventris", TRUE ~ class1))

试试这个:

重命名 Species1

Dataset1[Dataset1$class1 == "Actinopterygii" & Species1 == "Hyperolius cinnamomeoventris", "Species1"] <- "Amphibia"

Dataset1[Dataset1$class1 == "Actinopterygii" & Species1 == "Hoplobatrachus occipitalis", "Species1"] <- "Amphibia"

组数据框

Dataset2 = Dataset1 %>% group_by(class1, Species1) %>% summarise(count1 = sum(count1))

听起来您只是想更改两个特定值? 如果是这样,我将只使用基本 R 子集:

## Find the species for which the class needs replacing:
rows_to_fix <- Dataset1[["Species1"]] %in% c("Hyperolius cinnamomeoventris", "Hoplobatrachus occipitalis")

## At those elements, replace Class1 with "amphibia"
Dataset1[["Class1"]][rows_to_fix] <- "amphibia"

这种方法的一个优点是它可以更清楚地表明您只是在调整几个特定的错误,而不是针对一组规则进行概括

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM