diff --git a/docs/structured-streaming-programming-guide.md b/docs/structured-streaming-programming-guide.md
index 2ef5d3168a87b..62589a62ac4c4 100644
--- a/docs/structured-streaming-programming-guide.md
+++ b/docs/structured-streaming-programming-guide.md
@@ -1100,6 +1100,21 @@ streamingDf.join(staticDf, "type") # inner equi-join with a static DF
streamingDf.join(staticDf, "type", "right_join") # right outer join with a static DF
{% endhighlight %}
+
+
+
+
+{% highlight r %}
+staticDf <- read.df(...)
+streamingDf <- read.stream(...)
+joined <- merge(streamingDf, staticDf, sort = FALSE) # inner equi-join with a static DF
+joined <- join(
+ staticDf,
+ streamingDf,
+ streamingDf$value == staticDf$value,
+ "right_outer") # right outer join with a static DF
+{% endhighlight %}
+
@@ -1227,6 +1242,30 @@ impressionsWithWatermark.join(
{% endhighlight %}
+
+
+
+{% highlight r %}
+impressions <- read.stream(...)
+clicks <- read.stream(...)
+
+# Apply watermarks on event-time columns
+impressionsWithWatermark <- withWatermark(impressions, "impressionTime", "2 hours")
+clicksWithWatermark <- withWatermark(clicks, "clickTime", "3 hours")
+
+# Join with event-time constraints
+joined <- join(
+ impressionsWithWatermark,
+ clicksWithWatermark,
+ expr(
+ paste(
+ "clickAdId = impressionAdId AND",
+ "clickTime >= impressionTime AND",
+ "clickTime <= impressionTime + interval 1 hour"
+)))
+
+{% endhighlight %}
+
@@ -1287,6 +1326,23 @@ impressionsWithWatermark.join(
{% endhighlight %}
+
+
+
+{% highlight r %}
+joined <- join(
+ impressionsWithWatermark,
+ clicksWithWatermark,
+ expr(
+ paste(
+ "clickAdId = impressionAdId AND",
+ "clickTime >= impressionTime AND",
+ "clickTime <= impressionTime + interval 1 hour"),
+ "left_outer" # can be "inner", "left_outer", "right_outer"
+))
+
+{% endhighlight %}
+
@@ -1441,15 +1497,29 @@ streamingDf
{% highlight python %}
streamingDf = spark.readStream. ...
-// Without watermark using guid column
+# Without watermark using guid column
streamingDf.dropDuplicates("guid")
-// With watermark using guid and eventTime columns
+# With watermark using guid and eventTime columns
streamingDf \
.withWatermark("eventTime", "10 seconds") \
.dropDuplicates("guid", "eventTime")
{% endhighlight %}
+
+
+
+{% highlight r %}
+streamingDf <- read.stream(...)
+
+# Without watermark using guid column
+streamingDf <- dropDuplicates(streamingDf, "guid")
+
+# With watermark using guid and eventTime columns
+streamingDf <- withWatermark(streamingDf, "eventTime", "10 seconds")
+streamingDf <- dropDuplicates(streamingDf, "guid", "eventTime")
+{% endhighlight %}
+