使用dplyr和stringr替换所有值以

Tom*_*son 4 r stringr dplyr

我的朋友

> df <- data.frame(food = c("fruit banana", "fruit apple", "fruit grape", "bread", "meat"), sold = rnorm(5, 100))
>   df
          food      sold
1 fruit banana  99.47171
2  fruit apple  99.40878
3  fruit grape  99.28727
4        bread  99.15934
5         meat 100.53438
Run Code Online (Sandbox Code Playgroud)

现在我想要替换以"水果"开头的食物中的所有值,然后按食物分组并总结出售的总和.

> df %>%
+     mutate(food = replace(food, str_detect(food, "fruit"), "fruit")) %>% 
+     group_by(food) %>% 
+     summarise(sold = sum(sold))
Source: local data frame [3 x 2]

    food      sold
  (fctr)     (dbl)
1  bread  99.15934
2   meat 100.53438
3     NA 298.16776
Run Code Online (Sandbox Code Playgroud)

为什么这个命令不起作用?它给了我NA而不是水果?

PKu*_*mar 8

这对我有用,我认为你的数据是因素:

stringsAsFactors=FALSE在制作如下数据时使用,或者您可以options(stringsAsFactors=FALSE)在R环境中运行以避免相同:

df <- data.frame(food = c("fruit banana", "fruit apple", "fruit grape", "bread", "meat"), sold = rnorm(5, 100),stringsAsFactors = FALSE)

df %>%
mutate(food = replace(food, str_detect(food, "fruit"), "fruit")) %>% 
group_by(food) %>% 
summarise(sold = sum(sold))
Run Code Online (Sandbox Code Playgroud)

输出:

 # A tibble: 3 × 2
       food      sold
      <chr>     <dbl>
    1 bread  99.67661
    2 fruit 300.28520
    3  meat  99.88566
Run Code Online (Sandbox Code Playgroud)