str_replace 在数据框中?

str_replace in a data frame?

在我的 R 代码中,我试图将一个换行符插入到我的数据集中其中一列的几个较长的字符串值中。代码运行,但输出始终与原始字符串相同,没有发生任何变化。当我将列作为向量拉出并应用相同的代码时,它完全可以正常工作。我还是 R 的新手,删除列以应用函数然后将其重新附加到原始数据框的过程似乎相当复杂。有没有一种方法可以在数据框中成功完成此操作?

library(tidyverse)
library(stringr)

dog_descriptions2 <-
  dog_descriptions %>% 
  mutate(breed_primary2 = str_replace_all(breed_primary, c("Pit Bull Terrier" = "Pit Bull\nTerrier", "Labrador Retriever" = "Labrador\nRetriever", "Border Collie" = "Border\nCollie")))

感谢您的帮助!

我不确定我是否会使用 str_replace_all 来完成这项任务。相反,我建议在 dplyr.

中使用 recode()recode_factor()
library(tidyverse)

# If breed_primary is a character
new.dog.df <- dog_descriptions2 %>%
   mutate(breed_primary2 = recode(breed_primary, 
                                  `Pit Bull Terrier` = "Pit Bull\nTerrier",
                                  `Labrador Retriever` = "Labrador\nRetriever", 
                                  `Border Collie` = "Border\nCollie")

# If breed_primary is a factor
new.dog.df <- dog_descriptions2 %>%
   mutate(breed_primary2 = recode_factor(breed_primary, 
                                  `Pit Bull Terrier` = "Pit Bull\nTerrier",
                                  `Labrador Retriever` = "Labrador\nRetriever", 
                                  `Border Collie` = "Border\nCollie")

我会尝试使用 case_when()

dog_descriptions %>% 
  mutate(breed_primary2 = case_when(
breed_prmary == "Pit Bull Terrier" ~ "Pit Bull\nTerrier",
breed_prmary == "Labrador Retriever" ~ "Labrador \nRetriever",
breed_primary == "Border Collie" ~ "Border\nCollie",
breed_primary # keep the other cases as they are (?)
)

这种方法取决于您实际拥有并愿意输入的案例数量,但如果没有关于您的数据的更多信息,很难说。

查看您的原始数据框和输出数据框可能会有用,因为您的代码在虚拟数据框上非常适合我:

dog_descriptions <- data.frame(breed_primary = c("Pit Bull Terrier",
                                                 "Labrador Retriever",
                                                 "Border Collie"),
                               number_of_legs = rep(4, 3))

所以现在当我 运行 你的代码完全照原样时:

dog_descriptions2 <-
  dog_descriptions %>% 
  mutate(breed_primary2 = str_replace_all(breed_primary, c("Pit Bull Terrier" = "Pit Bull\nTerrier", "Labrador Retriever" = "Labrador\nRetriever", "Border Collie" = "Border\nCollie")))

并检查 dog_descriptions2,我得到

> dog_descriptions2
>#        breed_primary number_of_legs      breed_primary2
># 1   Pit Bull Terrier              4   Pit Bull\nTerrier
># 2 Labrador Retriever              4 Labrador\nRetriever
># 3      Border Collie              4      Border\nCollie

感谢您的帮助!我觉得自己像个假人。我总是会使用 View() 检查我的代码的输出,而不是像打印对象这样的其他方法。该代码实际上工作正常,但在 View() 中,字符串不显示换行符“\n”。我猜是学习一门新的编程语言的尝试。