You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为books数据框创建并添加affordable因子变量?

没问题,这事儿其实挺简单的,我给你两种常用的实现方式,你可以根据自己的编程习惯来选:

方法一:用Base R 实现

这是最基础的写法,不用额外加载包:

首先可以分两步来,先生成判断后的字符变量,再转成factor类型:

# 第一步:根据price判断生成affordable字符变量
books$affordable <- ifelse(books$price > 100, "no", "yes")
# 第二步:将字符变量转换为指定水平的factor
books$affordable <- factor(books$affordable, levels = c("yes", "no"))

也可以把两步合并成一行代码,更紧凑:

books$affordable <- factor(ifelse(books$price > 100, "no", "yes"), levels = c("yes", "no"))

这里提一句:levels = c("yes", "no")是指定factor的水平顺序,这样后续做统计或者绘图的时候,会优先显示"yes";如果不需要特定顺序也可以省略,但R会默认按字母排序(这里"no"会排在"yes"前面),所以建议加上指定顺序更符合你的需求。

方法二:用dplyr 包实现(管道风格更清晰)

如果你平时习惯用tidyverse系列的工具,dplyr的写法会更直观,尤其是处理多个变量的时候:

首先得先加载dplyr包(如果没装的话先跑install.packages("dplyr")安装):

library(dplyr)

然后用mutate()函数添加新变量,配合case_when()做条件判断:

books <- books %>%
  mutate(affordable = case_when(
    price > 100 ~ "no",
    price < 100 ~ "yes"
  ) %>% factor(levels = c("yes", "no")))

补充说明:关于price等于100的情况

你的问题里没提到price刚好等于100的情况,上面的代码里这种情况会返回NA。如果需要处理这种边界值,比如把price=100归为"no"或者"yes",只需要在条件里调整就行:
比如归为"no"的Base R版本:

books$affordable <- ifelse(books$price >= 100, "no", "yes") %>% factor(levels = c("yes", "no"))

dplyr版本:

books <- books %>%
  mutate(affordable = case_when(
    price >= 100 ~ "no",
    price < 100 ~ "yes"
  ) %>% factor(levels = c("yes", "no")))

最后可以用str(books)或者class(books$affordable)来确认新变量确实是factor类型哦。

内容的提问来源于stack exchange,提问作者user9476687

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:54:51