Knowing how to get the number of rows in R is essential when working with large datasets. In this post, we will look at different ways to count rows, including using data.table
. We have previously looked at how to select columns in data.table
and how to filter data. Now, we will focus on a simple task: counting rows in data.frames
and data.tables.
Table of Contents
- How to Get the Number of Rows using Base R
- How to Get the Number of Rows in data.table
- data.table vs. Base R: Which Counts Rows Quickest?
- Conclusion
How to Get the Number of Rows using Base R
The absolute easiest way to get the number of rows in R is by using the nrow()
function:
df <- data.frame(a = 1:5, b = 6:10)
nrow(df)
Code language: HTML, XML (xml)
In the code chunk above, we created a simple data frame and used nrow()
to count the rows. This method works for both data.frame
and data.table
objects.

How to Get the Number of Rows in data.table
For data.table
, we can use the .N
symbol, which is optimized for performance:
library(data.table)
dt <- data.table(a = 1:5, b = 6:10)
nrow(dt)
Code language: HTML, XML (xml)
In the code chunk above, we created a simple data.table
with two columns (a
and b
) and five rows. We then used the nrow()
function to get the number of rows in the data.table
.

data.table vs. Base R: Which Counts Rows Quickest?
Now we have seen that we can use nrow()
on both a data.frame
and a data.table
. But why use data.table
? Here, we can test which one counts rows fastest:
library(data.table)
library(microbenchmark)
set.seed(20250326)
# Create large datasets
df <- data.frame(a = runif(2e8), b = runif(2e8))
dt <- as.data.table(df)
# Benchmark nrow() vs .N
microbenchmark(
base_r = nrow(df),
data_table = nrow(dt),
times = 10
)
Code language: PHP (php)
In the code chunk above, we created two datasets: one as a data.frame
(df
) and the other as a data.table
(dt
). We used microbenchmark
to compare the time it takes to count rows using nrow()
in Base R for the data.frame
and data.table
. The function nrow()
is applied to both objects, and we measure the time for 10 iterations.
Results
The table below shows the benchmarking results of counting rows for both Base R and data.table
:
Expression | Min (ns) | LQ (ns) | Mean (ns) | Median (ns) | UQ (ns) | Max (ns) | Evaluations | Cld |
---|---|---|---|---|---|---|---|---|
base_r | 1400 | 1400 | 4810 | 1950 | 2200 | 31800 | 10 | a |
data_table | 800 | 800 | 1930 | 900 | 1100 | 11000 | 10 | a |
data.tables
is faster than with data.frames
.As we can see from the table, nrow()
on a data.table
is slightly faster than on a data.frame
, but the difference is relatively minor in this case. However, you may see a more considerable difference as datasets grow and the number of rows increases.
Conclusion
In this post, we first learned how to use nrow()
to count the number of rows in a data frame in R. We then learned how to perform the same task using data.table
, highlighting the advantages of working with data.table
for efficient data manipulation. Finally, we ran a speed comparison between nrow()
in Base R and nrow()
in data.table
, discovering that data.table
performs quicker when working with large datasets.
If you found this post helpful, consider sharing it on social media to spread the knowledge! I would love to hear your thoughts, so feel free to comment below with any questions or insights.