无法在R

时间:2019-06-28 13:57:05

标签: r

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的列。

2 个答案:

答案 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)会按预期工作。