我是R的新手并试图将国际象棋评级(按国家/地区)与人类发展指数或类似的东西联系起来。我正在努力将数据集分成各国的平均评级。
ChessDF <- read.csv("Book3.csv", header=TRUE)
ChessDF <- ChessDF[ which(ChessDF$B.day > 1945),]
ChessMeans <- by(ChessDF$Rtng,ChessDF$Fed, mean, simplify = F)
Rtng =评级,美联储=国家,Book3 / ChessDF是我的数据框架。
但是,如果我这样做,则返回一个相当无用的列表,因为它看起来像这样:
ChessDF$Fed: YEM
[1] 1818.206
-----------------------------------------------------------
ChessDF$Fed: ZAM
[1] 1896.52
-----------------------------------------------------------
ChessDF$Fed: ZIM
[1] 1689.874
我想要一个只返回数值的列表,有点像这样:
1818 1896 1689 etc..
然后我可以为值分配名称,以便YemMean = 1818
等。目前列表不可行。
我发现的解决方案是:
list2env(ChessMeans, envir = .GlobalEnv)
这确实为国家/地区分配了数值,但我很难从全球环境中导出对象,而且似乎是错误的 如何去做吧。任何帮助,将不胜感激!
答案 0 :(得分:2)
适合我。您建议的1818 1896 1689 etc..
可能更好地描述为R lingo中的向量。列表可以包含截然不同的结构,而向量,矩阵和数据框架则具有更严格的形式。
x <- by(iris[, 1], INDICES = iris$Species, FUN = mean)
str(x)
by [1:3(1d)] 5.01 5.94 6.59
- attr(*, "dimnames")=List of 1
..$ iris$Species: chr [1:3] "setosa" "versicolor" "virginica"
- attr(*, "call")= language by.default(data = iris[, 1], INDICES = iris$Species, FUN = mean)
x[1]
setosa
5.006
mean(x)
[1] 5.843333
正如您在str(x)
看到的那样,这实际上是一个维度的矩阵。您可以像常规向量(x[1]
)一样访问它,甚至可以将mean(x)
等函数应用于它。不要被x
打印的方式所迷惑。仔细看看结构。
类似地
> str(tapply(X = iris[, 1], INDEX = iris$Species, FUN = mean))
num [1:3(1d)] 5.01 5.94 6.59
- attr(*, "dimnames")=List of 1
..$ : chr [1:3] "setosa" "versicolor" "virginica"
正如我之前的其他人所提到的(请参阅评论部分),而不是产生data.frame。
> str(aggregate(Sepal.Length ~ Species, FUN = mean, data = iris))
'data.frame': 3 obs. of 2 variables:
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 2 3
$ Sepal.Length: num 5.01 5.94 6.59