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
相关产品推荐
相关产品推荐

