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

