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

如何用ifelse()修改数据框列值?遇返回FALSE而非52的问题

问题:ifelse()未按预期修改列值,出现FALSE而非52

我尝试用ifelse()修改数据框的week列值:当month为'January'且day为31时,将week改为52,但结果中本该显示52的位置却出现了FALSE。示例如下:

> a
   SampleDate year   month week day
1  2013-01-05 2013 January   01  05
2  2013-01-08 2013 January   02  08
3  2013-01-08 2013 January   02  08
4  2013-01-05 2013 January   01  05
5  2013-01-05 2013 January   01  05
6  2013-01-08 2013 January   02  08
7  2013-01-08 2013 January   02  08
8  2013-01-05 2013 January   01  05
9  2013-01-03 2013 January   01  03
10 2013-01-08 2013 January   02  08
11 2013-01-07 2013 January   02  07
12 2013-01-03 2013 January   01  03
13 2013-01-03 2013 January   01  03
14 2013-01-08 2013 January   02  31
15 2013-01-07 2013 January   02  07
16 2013-01-03 2013 January   01  31
> 
> ## "FALSE" should be 52
> with(a, ifelse(month == 'January' & day == 31, week == 52, week))
 [1] "01"    "02"    "02"    "01"    "01"    "02"    "02"    "01"    "01"   
[10] "02"    "02"    "01"    "01"    "FALSE" "02"    "FALSE"

数据

a <- structure(list(SampleDate = structure(c(15710, 15713, 15713, 
15710, 15710, 15713, 15713, 15710, 15708, 15713, 15712, 15708, 
15708, 15713, 15712, 15708), class = "Date"), year = c("2013", 
"2013", "2013", "2013", "2013", "2013", "2013", "2013", "2013", 
"2013", "2013", "2013", "2013", "2013", "2013", "2013"), month = c("January", 
"January", "January", "January", "January", "January", "January", 
"January", "January", "January", "January", "January", "January", 
"January", "January", "January"), week = c("01", "02", "02", 
"01", "01", "02", "02", "01", "01", "02", "02", "01", "01", "02", 
"02", "01"), day = c("05", "08", "08", "05", "05", "08", "08", 
"05", "03", "08", "07", "03", "03", "31", "07", "31")), row.names = c(NA, 
-16L), class = "data.frame")

解决方法

错误原因

你在ifelse的第二个参数中写了week == 52,这是一个比较运算,会返回布尔值TRUE或FALSE,而不是将week赋值为52。另外你的day列是字符型,判断时最好用字符值'31'保持类型一致。

正确代码

with(a, ifelse(month == 'January' & day == '31', "52", week))

运行结果

[1] "01" "02" "02" "01" "01" "02" "02" "01" "01" "02" "02" "01" "01" "52" "02" "52"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:53:31