【问题标题】:R if statement comparing stringsR if 语句比较字符串
【发布时间】:2016-08-17 14:58:35
【问题描述】:

我正在尝试使用比较字符串的 if 语句在 R 中创建一个计算字段,这在 Excel 中很容易,但我无法在 R 中计算出来。Excel 中的公式如下所示:

=IF(AND(E2<>"Accepted", B2=B3,E3="Accepted" ),  -(F2-F3),"")

其中 B 列是 9 位数字的列表(即 200100111),F 列包含日期。我用R写的代码如下:

if(df_srt$NUMBER==shift(df_srt$NUMBER, 1L, type="lead") &amp;&amp; df_srt$DESCRIPTION != "Accepted" &amp;&amp; shift(VA_df_srt$DESCRIPTION, 1L, type="lead")=="Accepted") {1} else {0}

然后我意识到 if 语句只比较 1 的向量长度,所以这不起作用。我可以单独比较字符串以获得“TRUE”值,如下所示:

TEST2calc <- df_srt$NUMBER==shift(df_srt$NUMBER, 1L, type="lead")

但我想进行这三个比较,然后在它们都为真时分配一个值。

谢谢

【问题讨论】:

  • if 中的数字不需要大括号。

标签: r string if-statement strcmp


【解决方案1】:

如您所述,if 仅比较单个值。对于矢量化版本,您需要使用ifelse,同样需要切换到&amp;&amp;|| 的矢量化版本,分别为&amp;|

因此:

ifelse(df_srt$NUMBER == shift(df_srt$NUMBER, 1L, type = "lead") &
       df_srt$DESCRIPTION != "Accepted" &
       shift(VA_df_srt$DESCRIPTION, 1L, type = "lead") == "Accepted", 1, 0)

或者,您可以使用逻辑值可以通过as.numeric 转换为数字 1 和 0 的事实:

as.numeric(df_srt$NUMBER == shift(df_srt$NUMBER, 1L, type = "lead") &
           df_srt$DESCRIPTION != "Accepted" &
           shift(VA_df_srt$DESCRIPTION, 1L, type = "lead") == "Accepted")

【讨论】:

    猜你喜欢
    • 2016-07-17
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多