You might want to be a little bit wary of thinking about "the Ramda way." Ramda (disclaimer: I'm one of the Ramda authors) is simply a library, a toolkit. It is not meant to dictate anything about how you write your code, only to make it easier to write in a certain manner... when that manner is appropriate.
That said, it's easy enough to write this using Ramda:
const {compose, take, concat, __, repeat} = R
const toFixed = (n, d) => compose(take(n), concat(__, repeat(d, n)))
const take5 = toFixed(5, undefined)
console.log(take5([1, 2, 3, 4, 5, 6])) //=> [1, 2, 3, 4, 5]
console.log(take5([1, 2, 3])) //=> [1, 2, 3, undefined, undefined]
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>
Note that this offers you the possibility, if it helps, of choosing that default value at fill time. That may or may not be useful to you, but you can just choose undefined if you like.
This is not entirely point-free. Could it be made so? Presumably. But it is readable as is (mostly*), and I would probably not bother going any further.
The big issue, though, is that Ramda here does not offer much of an improvement over what we would write without the library. Here's another version, without Ramda:
const toFixed2 = (n, d) => (xs) => xs.concat(Array(n).fill(d)).slice(0, n)
const brubeck = toFixed2(5, undefined)
console.log(brubeck([1, 2, 3, 4, 5, 6])) //=> [1, 2, 3, 4, 5]
console.log(brubeck([1, 2, 3])) //=> [1, 2, 3, undefined, undefined]
If find the Ramda version slightly more readable, and it's a little shorter. But it is not a drastic improvement. I would never introduce Ramda to a code-base only for this minor improvement. But if I was already using Ramda, I would choose that version.
Update
The discussion in the comments to this answer mentions another solution, related to one in the question's comments:
const desmond = (arr) => (arr = arr.slice(0), arr.length = 5, arr)
(You could also skip the slice step if you don't mind mutating your original array.)
This of course has a different API than the above, and does not allow you to supply the default value. But there is one other subtle difference.
All solutions get arrays that report length of 5; they have the same JSON.strigify output, they report the same values for each index, but:
3 in take5([1, 2, 3]) //=> true
3 in brubeck([1, 2, 3]) //=> true
3 in desmond([1, 2, 3]) //=> false
So there is a discoverable difference. This last solution changes the length of the array, but does not place anything at the missing indices. The earlier two do so. Given that what we're placing is the value undefined, this may not matter at all, but sometimes such subtleties can bite us.
(*) The placeholder (__) always seems to cause functions to seem less readable to some, and more so to others. If you like, you can replace concat(__, foo) with flip(concat)(foo)
arr.length = 5