当前位置: 首页 > 知识库问答 >
问题:

使用具有多个真实条件的case_when

澹台阳秋
2023-03-14

这段代码

library(dplyr)

letters = c("A","B","C")
numbers = c(4, 15, 35)

df <- data.frame(letters, numbers)

df %>% 
  mutate(category = case_when(
    numbers %% 5 == 0 ~ "fizz",
    numbers %% 7 == 0 ~ "buzz",
    TRUE ~ as.character(numbers)
  )
  )

产生如下数据帧:

  letters numbers category
1       A       4        4
2       B      15     fizz
3       C      35     fizz

我想看到的结果是这个数据框:

  letters numbers category
1       A       4        4
2       B      15     fizz
3       C      35     fizz
4       C      35     buzz

因为对于行C有两个条件为真,所以我希望为它们中的每一个创建一行。我怎样才能做到这一点?

共有1个答案

后易安
2023-03-14

case_when/ifelse将仅返回条件1的输出。您可以这样做:

library(dplyr)
df %>% 
  mutate(category = case_when(
    numbers %% 5 == 0 & numbers %% 7 == 0 ~ "fizz, buzz",
    numbers %% 5 == 0 ~ "fizz",
    numbers %% 7 == 0 ~ "buzz",
    TRUE ~ as.character(numbers))) %>% 
    tidyr::separate_rows(category)

#  letters numbers category
#  <chr>     <dbl> <chr>   
#1 A             4 4       
#2 B            15 fizz    
#3 C            35 fizz    
#4 C            35 buzz    
 类似资料:
  • 我尝试在数据帧“df_energy”中添加一个新的列“energy_class”,如果“consumpion_energy”值为 有什么办法可以帮我吗? 先谢谢你

  • 我收集了用户在商店购买的物品,以及他从朋友那里得到的喜欢和不喜欢的东西。集合字段如下所示: 现在,我想得到以下总结: 获取用户X的(喜欢-不喜欢)差异 获取用户X的差异(喜欢-不喜欢)到存储Y 获取用户X的(喜欢-不喜欢)差异到商店Y和产品Z 对于#1,我做了: 我得到了正确的结果: [{"_id":"542ea90fbb1e37b09f660980","rankDiff": 2}] 但当我试图通

  • 问题内容: 我想知道是否可能有这样的事情: 知道项目是通过请求接收的JSON容器,因此这就是为什么我使用键值方法的原因。 谢谢 我之所以问是因为我尝试使用Google进行谷歌搜索,但是我唯一能得到的结果是,但是我必须使用。 问题答案: 你当然可以。就像是: HTML JS 演示小提琴

  • 我在Amazon DynamoDB表分区键和范围键。 表结构 现在我想使用带有多个扫描条件的C#库从表中检索数据。 HashKey=123 有什么方法可以使用c#dynamoDB API实现这一点吗?请帮忙

  • 问题内容: 我有2张桌子: 表: 表: 现在,我想获取所有位置并过滤两个属性: 我正在尝试构造一些查询,如下所示: …但是仍然无法得到我所需要的。 问题答案: 经过几个小时的合并和尝试,我终于做到了: 我太接近了,因此将所有过滤条件都移至。

  • 问题内容: 我有一个变量。 我想呼应,如果等于任何下列值,,,,或。有没有办法通过像?? 这样的单个语句来做到这一点? 问题答案: 我认为,使用“ Or”代替“ And”会有所帮助