R的gdata::left()
和gdata::right()
是否实际上是相同的功能,但是名称不同并且工作正常,还是我使用不正确?
我有:mtcars
我想要:仅mtcars
的最后2列
(我知道我可以用mtcars[,(length(mtcars)-1):(length(mtcars))]
来问这个,但是为什么有更简单的方法呢?)
我想要的东西看起来像这样:
gear carb
Mazda RX4 4 4
Mazda RX4 Wag 4 4
Datsun 710 4 1
Hornet 4 Drive 3 1
Hornet Sportabout 3 2
...
似乎right(mtcars,2)
将完成此任务,但相反却给出了
mpg cyl
Mazda RX4 21.0 6
Mazda RX4 Wag 21.0 6
Datsun 710 22.8 4
Hornet 4 Drive 21.4 6
Hornet Sportabout 18.7 8
...
与left(mtcars,2)
完全相同:
mpg cyl
Mazda RX4 21.0 6
Mazda RX4 Wag 21.0 6
Datsun 710 22.8 4
Hornet 4 Drive 21.4 6
Hornet Sportabout 18.7 8
...
我的主要问题是,从数据框中获取最右边的n列的最简单方法是什么?我想要一些东西,希望以R为基数,它不需要知道总数的总数。 mtcars
的列。
答案 0 :(得分:4)
我们可以对tail
中的列名使用base R
来获取最后n
列
mtcars[tail(names(mtcars), 2)]
或者head
获得前n
列
mtcars(head(names(mtcars), 2)]
答案 1 :(得分:4)
gdata中似乎有一个奇怪/愚蠢的错误。如果查看left/right的源代码,您会发现两个函数都得到一个UseMethod("left")
。据我了解,这意味着使用data.frame进行调用将导致对left.data.frame
的调用。确实,如果我输入
right <- function(x, n=6L) UseMethod("right")
然后right(mtcars,2)
会按预期工作。