对于R,mtcars中的数据集,我试图从第1,2和8列和第9列创建数据框的子集。我想索引第8列和第9列,以便我可以调用一个或者其他在我的函数中,以获得一定的输出。
所以我做了
highestmpg <- function(cyl, type) {
type <- mtcars[, c(8, 9)]
df <- mtcars[, c(1, 2, type)]
我在函数
中遇到了错误.subset(x,j)出错:无效的下标类型&#39; list&#39;
我不明白这个错误,有人可以帮我弄清楚如何规避这个错误吗?
我的目的是创建一个数据框,我可以在其中输入第2列(cyl),第8列或第9列(0或1),以获得第1列的值(mpg)
我想按照od,然后按类型对mtcars进行排名,以便最终得到一个有组织的mpg数据框,以便以后找到最高的mpg,具体取决于输入
ranking <- mtcars[order(cyl, type, mpg)]
我提前道歉,我仍然是R的初学者,我可能在所有术语中都不正确,我将不胜感激任何建议!
答案 0 :(得分:0)
如果我执行您提供的代码,我就不会收到您报告的错误,而是另一个错误。当你输入第二行时,我会假设你错过了一个括号,所以它应该是:
type <- mtcars[, c(8, 9)]
df <- mtcars[, c(1, 2, type)]
错误消息表明您正尝试使用列表进行子集化。这是因为type
是data.frame
(实际上是R中的列表),因此您将列表项1和2添加到此列表中并获得结果:
> c(1, 2, type)
[[1]]
[1] 1
[[2]]
[1] 2
$vs
[1] 0 0 1 1 0 1 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 0 1 0 0 0 1
$am
[1] 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1
将其用于子集化没有意义,您可能并不打算这样做。我不太明白你想要做什么,所以这是我现在唯一可以提供的帮助。
答案 1 :(得分:0)
您获得的错误是因为您将data.frame type
传递给期望单个类型列表的函数(c
)。此
mtcars[, c(1, 2, 8)]
或者
mtcars[, c("mpg", "cyl", "am")]
会奏效。
目前还不清楚你是否需要这里的功能。这应该可以给你你想要的东西(按汽车和汽车的比例排列,或者比较或者是)
mtcars[order(mtcars$cyl, mtcars$vs), ]
mtcars[order(mtcars$cyl, mtcars$am), ]