我正在尝试使用比较字符串的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") && df_srt$DESCRIPTION != "Accepted" && 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")
但我希望进行这三次比较,然后分配一个值,如果它们都是真的。
由于
答案 0 :(得分:1)
如您所述,if
仅比较单个值。对于矢量化版本,您需要使用ifelse
,同样需要切换到&&
和||
的矢量化版本,&
和{{1}分别。
因此:
|
或者,您可以使用以下事实:逻辑值可以通过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)
转换为数字1和0:
as.numeric