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

RStudio中基于条件计算新变量的问题求助

解决R中基于条件创建加权变量的问题

需要在RStudio中生成新变量FIX_weighted,规则如下:

  • 当outl_item为"outlier"时,durFIX除以2
  • 当outl_item为"no outlier"时,durFIX除以10
  • 当outl_item为"without outlier"时,durFIX除以12

原尝试的dplyr代码无法正常运行,代码及测试数据如下:

原代码

fixationtime <- fixationtime %>%
  mutate(FIX_weighted = case_when(
    outl_item == "outlier"   ~ durFIX / 2,
    outl_item == "no outlier"    ~ durFIX / 10,
    outl_item == "without outliers" ~ durFIX / 12
  ))

测试数据

structure(list(outl_item = c("no outlier", "no outlier", "no outlier", 
"outlier", "outlier", "outlier", "no outlier", "without outlier", 
"without outlier", "no outlier", "no outlier", "outlier", "without outlier", 
"without outlier", "outlier", "outlier", "outlier", "without outlier", 
"without outlier", "no outlier", "outlier", "without outlier", 
"without outlier", "without outlier", "no outlier", "outlier", 
"without outlier", "no outlier", "without outlier", "without outlier"
), VP = structure(c(17L, 45L, 41L, 46L, 39L, 32L, 26L, 27L, 2L, 
39L, 32L, 36L, 17L, 29L, 13L, 26L, 45L, 10L, 11L, 38L, 9L, 32L, 
45L, 15L, 19L, 12L, 43L, 39L, 22L, 6L), levels = c("1", "2", 
"3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", 
"15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", 
"26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", 
"37", "38", "39", "40", "41", "42", "43", "44", "45", "46"), class = "factor"), 
    TRIAL = c(3L, 34L, 36L, 27L, 26L, 6L, 11L, 13L, 30L, 37L, 
    38L, 36L, 40L, 14L, 23L, 37L, 22L, 14L, 16L, 11L, 11L, 40L, 
    23L, 36L, 38L, 6L, 23L, 35L, 12L, 33L), BLOCK = c(7L, 1L, 
    3L, 8L, 7L, 6L, 4L, 7L, 2L, 5L, 2L, 2L, 3L, 1L, 7L, 4L, 3L, 
    8L, 3L, 6L, 3L, 2L, 3L, 1L, 1L, 8L, 1L, 1L, 6L, 6L), OUTL = structure(c(2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 
    2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 1L), levels = c("no outlier", 
    "outlier"), class = "factor"), Condition = c("Parallel trials with outliers", 
    "Parallel trials with outliers", "Parallel trials with outliers", 
    "Parallel trials with outliers", "Parallel trials with outliers", 
    "Parallel trials with outliers", "Parallel trials with outliers", 
    "Parallel trials without outliers", "Parallel trials without outliers", 
    "Parallel trials with outliers", "Parallel trials with outliers", 
    "Parallel trials with outliers", "Parallel trials without outliers", 
    "Parallel trials without outliers", "Parallel trials with outliers", 
    "Parallel trials with outliers", "Parallel trials with outliers", 
    "Parallel trials without outliers", "Parallel trials without outliers", 
    "Parallel trials with outliers", "Parallel trials with outliers", 
    "Parallel trials without outliers", "Parallel trials without outliers", 
    "Parallel trials without outliers", "Parallel trials with outliers", 
    "Parallel trials with outliers", "Parallel trials without outliers", 
    "Parallel trials with outliers", "Parallel trials without outliers", 
    "Parallel trials without outliers"), durFIX = c(1515L, 1657L, 
    1315L, 0L, 175L, 762L, 946L, 1780L, 1417L, 1719L, 1686L, 
    576L, 1711L, 1559L, 0L, 0L, 586L, 1792L, 1708L, 1532L, 624L, 
    1685L, 1717L, 1386L, 1426L, 227L, 1688L, 1581L, 1042L, 1345L
    )), row.names = c(NA, -30L), class = "data.frame")

问题原因

原代码无法运行的核心问题是字符串匹配错误:测试数据中outl_item的取值是"without outlier"(单数),但代码里写的是"without outliers"(复数),导致这部分数据无法匹配,生成NA。另外,case_when如果没有覆盖所有情况,未匹配的行也会生成NA,建议添加默认分支。

修正后的代码

# 确保加载dplyr包
library(dplyr)

fixationtime <- fixationtime %>%
  mutate(FIX_weighted = case_when(
    outl_item == "outlier"          ~ durFIX / 2,
    outl_item == "no outlier"       ~ durFIX / 10,
    outl_item == "without outlier"  ~ durFIX / 12,
    # 处理未匹配的情况,可选,避免生成NA
    TRUE                            ~ NA_real_
  ))

验证结果

运行修正后的代码后,查看新变量:

# 查看前10行的关键列
fixationtime %>% select(outl_item, durFIX, FIX_weighted) %>% head(10)

输出示例:

outl_item durFIX FIX_weighted
1    no outlier   1515        151.50
2    no outlier   1657        165.70
3    no outlier   1315        131.50
4        outlier      0          0.00
5        outlier    175         87.50
6        outlier    762        381.00
7    no outlier    946         94.60
8 without outlier   1780        148.3333
9 without outlier   1417        118.0833
10   no outlier   1719        171.90

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:47:01