首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据R中的其他变量创建新变量

根据R中的其他变量创建新变量
EN

Stack Overflow用户
提问于 2022-05-29 12:27:05
回答 2查看 197关注 0票数 1

使用R,我试图创建一个变量,基于数据框架中的3个现有变量。示例:

代码语言:javascript
运行
复制
n <- 20
dat <- data.frame(id=1:n,
                  group=rep(LETTERS[1:5]),
                  type=factor(paste("type", 1:2)))

新变量“模型”的值应基于以下3项:

代码语言:javascript
运行
复制
If "type" = 1 then "model"= apple 
If "type" = 2 and "group" A or B, then "model"=cherry 
If "type" = 2 and "group" C and "id" 1-4, then"model"= strawberry 
If "type" = 2 and "group" C and "id" 5-8, then"model"= melon 
If "type" = 2 and "group" C and "id" >9, then "model"=pineapple

我试过了ifelse,但是我很难适应这些条件。

如何解决这个问题?

EN

回答 2

Stack Overflow用户

发布于 2022-05-29 12:39:02

您可以从tidyverse中使用case_when

代码语言:javascript
运行
复制
library(tidyverse)
n <- 20
dat <- data.frame(id=1:n,
                  group=rep(LETTERS[1:5]),
                  type=factor(paste("type", 1:2)))

dat %>% 
  mutate(
    model = case_when(
      type == "type 1" ~ "apple",
      type == "type 2" & group %in% c("A", "B") ~ "cherry",
      type == "type 2" & group == "C" & id %in% c(1:4) ~ "strawberry",
      type == "type 2" & group == "C" & id %in% c(5:8) ~ "melon",
      type == "type 2" & group == "C" & id >9 ~ "pineapple"
    )
  )
票数 4
EN

Stack Overflow用户

发布于 2022-05-29 12:46:09

嵌套ifelse选项:

代码语言:javascript
运行
复制
dat$color <- with(dat, ifelse(type == "type 1", "apple",
                       ifelse(type == "type 2" & group %in% c("A", "B"), "cherry",
                       ifelse(type == "type 2" & group == "C" & id %in% (1:4), "strawberry",
                       ifelse(type == "type 2" & group == "C" & id %in% (5:8), "melon",
                       ifelse(type == "type 2" & group == "C" & id >= 9, "pineapple", NA))))))

输出:

代码语言:javascript
运行
复制
   id group   type     color
1   1     A type 1     apple
2   2     B type 2    cherry
3   3     C type 1     apple
4   4     D type 2      <NA>
5   5     E type 1     apple
6   6     A type 2    cherry
7   7     B type 1     apple
8   8     C type 2     melon
9   9     D type 1     apple
10 10     E type 2      <NA>
11 11     A type 1     apple
12 12     B type 2    cherry
13 13     C type 1     apple
14 14     D type 2      <NA>
15 15     E type 1     apple
16 16     A type 2    cherry
17 17     B type 1     apple
18 18     C type 2 pineapple
19 19     D type 1     apple
20 20     E type 2      <NA>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72423614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档