在 R 中选择一系列变量
Selecting a range of variables in R
我需要总结一些数据,我正在使用 plyr
包中的函数 ddply
。数据集有 68 个变量,我试图取所有变量的平均值,并按其他两个变量分组。
我正在尝试使用以下代码,但它不起作用。
ddply(data, c("Var1", "Var2"), summarise, mean = mean(data$Var3 ~ data$Var68))
它向我显示了这条消息:
There were 50 or more warnings (use warnings() to see the first 50)
这有什么问题?
P.S.: Var1 是 factor
和 6 levels
,Var2 是 int
。所有其他变量都是 num
.
data.table
方法:
library(data.table)
setDT(data)
data[ , lapply(.SD, mean), by = .(Var1, Var2)]
添加花里胡哨的味道。
如果你想要基本的 R 方法,你可以使用 aggregate
。这是一个工作示例:
aggregate(. ~ g1 + g2, data=df, FUN=mean)
g1 g2 a b c
1 1 0 0.3163713 0.4030635 0.4926396
2 2 0 -0.8909029 0.4211550 0.3286698
3 1 1 -0.5466319 0.9146582 0.2588098
4 2 1 -0.6130626 0.2997645 0.5848791
这将计算两个分组变量的三个变量的平均值。相同的代码将计算 65 个变量的平均值。
数据
set.seed(1234)
df <- data.frame(a=rnorm(10), b=runif(10),
g1=sample(1:2, 10, replace=T), g2=rep(0:1, 5))
我们可以使用dplyr
library(dplyr)
data %>%
group_by(Var1, Var2) %>%
summarise_each(funs(mean = mean(., na.rm = TRUE)))
我需要总结一些数据,我正在使用 plyr
包中的函数 ddply
。数据集有 68 个变量,我试图取所有变量的平均值,并按其他两个变量分组。
我正在尝试使用以下代码,但它不起作用。
ddply(data, c("Var1", "Var2"), summarise, mean = mean(data$Var3 ~ data$Var68))
它向我显示了这条消息:
There were 50 or more warnings (use warnings() to see the first 50)
这有什么问题?
P.S.: Var1 是 factor
和 6 levels
,Var2 是 int
。所有其他变量都是 num
.
data.table
方法:
library(data.table)
setDT(data)
data[ , lapply(.SD, mean), by = .(Var1, Var2)]
添加花里胡哨的味道。
如果你想要基本的 R 方法,你可以使用 aggregate
。这是一个工作示例:
aggregate(. ~ g1 + g2, data=df, FUN=mean)
g1 g2 a b c
1 1 0 0.3163713 0.4030635 0.4926396
2 2 0 -0.8909029 0.4211550 0.3286698
3 1 1 -0.5466319 0.9146582 0.2588098
4 2 1 -0.6130626 0.2997645 0.5848791
这将计算两个分组变量的三个变量的平均值。相同的代码将计算 65 个变量的平均值。
数据
set.seed(1234)
df <- data.frame(a=rnorm(10), b=runif(10),
g1=sample(1:2, 10, replace=T), g2=rep(0:1, 5))
我们可以使用dplyr
library(dplyr)
data %>%
group_by(Var1, Var2) %>%
summarise_each(funs(mean = mean(., na.rm = TRUE)))