【问题标题】:How to change an element of the original dataframe using dplyr [duplicate]如何使用 dplyr 更改原始数据框的元素 [重复]
【发布时间】:2019-10-08 23:41:06
【问题描述】:

我有一个小玩意:

library('tibble')

df <- tibble(
  ticker = c("first", "second", "third"),
  status = c(T,T,T)
)

> df
# A tibble: 3 x 2
  ticker status
 1 first  TRUE  
 2 second TRUE  
 3 third  TRUE  

我想将原始df中'first'的状态更改为FALSE。

但是当我运行这段代码时:

library('dplyr')

df %<>%
  filter(ticker=='first') %>%
  mutate(
   status = F
  )

我只有第一行的原始df

> df
# A tibble: 1 x 2
  ticker status
1 first  FALSE 

代替:

> df
# A tibble: 3 x 2
  ticker status
1 first  FALSE 
2 second TRUE  
3 third  TRUE

【问题讨论】:

  • 使用mutate(status = ifelse(ticker=='first', F, T))
  • 这里的其他解决方案:stackoverflow.com/questions/27909000/… ...
  • df %&gt;% mutate(status = replace(status, ticker == "first", FALSE)) 或只是df %&gt;% mutate(status = ticker != "first")

标签: r dplyr


【解决方案1】:

使用函数case_when

library('tibble')

df <- tibble(
    ticker = c("first", "second", "third"),
    status = c(T,T,T)
)

library(tidyverse)

df %>% 
    mutate(status = case_when(
        ticker == "first" ~ F,
        TRUE ~ T
    ))

这是输出:

# A tibble: 3 x 3
  ticker status `case_when(ticker == "first" ~ F, TRUE ~ T)`
  <chr>  <lgl>  <lgl>                                       
1 first  TRUE   FALSE                                       
2 second TRUE   TRUE                                        
3 third  TRUE   TRUE 

【讨论】:

    【解决方案2】:

    使用基础 R

     within(df, status[ticker == "first"] <- FALSE )
    
    

    【讨论】:

    • 使用基础 R 更简单 df[df$ticker=='first', 'status']
    • 当然,但是如果您的数据框名称更长,那么在其中使用会更清晰、更容易。这就是within 的全部意义所在。
    猜你喜欢
    • 2016-01-24
    • 2017-12-12
    • 2019-09-20
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 2022-07-07
    相关资源
    最近更新 更多