Well, duplicating the position wouldn't be a travesty. For a first implementation you might be better off just using a sprite and not worrying about it.
As for alternatives, an sf::Sprite is actually an extremely simple object:
class SFML_GRAPHICS_API Sprite : public Drawable, public Transformable
{
...
Vertex m_vertices[4]; ///< Vertices defining the sprite's geometry
const Texture* m_texture; ///< Texture of the sprite
IntRect m_textureRect; ///< Rectangle defining the area of the source texture to display
};
so one option is to split the sf::Sprite into these three "components", and handle each of them yourself. Of course, that means duplicating a lot of the logic in sf::Sprite, and making your draw() calls a bit more complicated, but if you really want to avoid duplicating the position data, this is an option.
You can simply use sf::Sprite in your renderer's routine:
sf::Sprite sprite;
sprite.setTexture(entity.getGraphicsComponent.texture);
sprite.setPosition(entity.GetPhysicsComponent.position);
sprite.setRotation(entity.GetPhysicsComponent.rotation);
mWindow.draw(sprite);
At this point you don't really need the GraphicsComponent to hold much. You may want to keep the texture reference in it but as long as it specifies whether the entity must be rendered, it fulfills it's purpose.