在 R 中重命名观测值以进行过滤时,如何修复错误?

问题描述 投票:0回答:2

我正在尝试重命名 R 中的观察结果,以便我可以进行过滤,但我不断遇到错误。例如,如果数据集是

       farmer           fruit           number 
1       Sally       strawberries        32
2       Joe         strawberry         12
3       Bob           pear            42

但我想计算有多少农民在种植草莓。

我怎样才能做到这一点

       farmer           fruit           number 
1       Sally       **strawberry**          32
2       Joe         strawberry         12
3       Bob           pear            42

我试过了

df1 <- df %>% 
  mutate(fruit = str_replace(fruit, "strawberries", "strawberry"))

什么都没有改变。

我也尝试过

df1 <- df %>% 
+   mutate(fruit = as.character(fruit)) %>%
+   mutate(fruit = replace(fruit, fruit = "strawberries", "strawberry"))

并出现错误。

r rename mutate
2个回答
0
投票

(?i)
启动不区分大小写模式

无论字符大小写,“strawberry”都会被“strawberry”替换。

library(dplyr)
library(stringr)

df %>%
  mutate(fruit = str_replace_all(fruit, "(?i)strawberries", "strawberry"))

  farmer      fruit number
1  Sally strawberry     32
2    Joe strawberry     12
3    Bob       pear     42

数据:

df <- structure(list(farmer = c("Sally", "Joe", "Bob"), fruit = c("Strawberries", 
"strawberry", "pear"), number = c(32L, 12L, 42L)), class = "data.frame", row.names = c("1", 
"2", "3"))

0
投票

TarJae 提供的一个小数据集可以让任何想要提供帮助的人变得更容易。

事实上你从一开始就是对的,但我怀疑你混淆了

df
df1

df <- structure(list(farmer = c("Sally", "Joe", "Bob"), fruit = 
c("strawberries", "strawberry", "pear"), number = c(32L, 12L, 42L)),
class = "data.frame", 
row.names = c("1", "2", "3"))


##  df
##   farmer        fruit number
## 1  Sally strawberries     32
## 2    Joe   strawberry     12
## 3    Bob         pear     42

如果我应用您自己的命令但不将其分配给

df1
我有您所期望的。

df %>%   mutate(fruit = str_replace(fruit, "strawberries", "strawberry"))

当然赋值给df1没有什么错

df1 <-  df %>%   mutate(fruit = str_replace(fruit, "strawberries", "strawberry"))

但是我们需要检查

df1

  ## df1
  ##       farmer      fruit number
  ##     1  Sally strawberry     32
  ##     2    Joe strawberry     12
  ##     3    Bob       pear     42        

这是因为

mutate
函数复制了表
df
,因此表 df 保持不变。事实上,在我看来
mutate
这是一个糟糕的名字选择

© www.soinside.com 2019 - 2024. All rights reserved.