R 切割多个变量,为每个变量使用多个不同数量的容器
我有一个如下所示的数据集:R 切割多个变量,为每个变量使用多个不同数量的容器,r,for-loop,plyr,mean,bins,R,For Loop,Plyr,Mean,Bins,我有一个如下所示的数据集: ID a b ID1 0.1 20.3 ID2 0.2 21.6 ID3 1.2 1.5 etc. 我想把这些值分成大小相等的组。这可以通过以下方式实现: data$bin1 <- as.numeric(cut2(data$b,g=50)) means <- ddply(data,.(bin),summarise,mean.a=mean(a),mean.b=mean(b)) 但是,我需要对不同数量的组多次执行此操作。我试过: for (i in
ID a b
ID1 0.1 20.3
ID2 0.2 21.6
ID3 1.2 1.5
etc.
我想把这些值分成大小相等的组。这可以通过以下方式实现:
data$bin1 <- as.numeric(cut2(data$b,g=50))
means <- ddply(data,.(bin),summarise,mean.a=mean(a),mean.b=mean(b))
但是,我需要对不同数量的组多次执行此操作。我试过:
for (i in 1:5){
data$bin[i] <- as.numeric(cut2(data$values,g=i*50))
}
for(1:5中的i){
数据$bin[i]for(1:5中的i){
数据[粘贴('bin',i,sep='')这里有一种可能性,您可以使用lappy
在数据框中的列上循环,并使用sapply
在值要被剪切的间隔数上循环(“n_int”)。结果列表是melt
的长格式
平均值是使用聚合计算的,按“L1”(对应于原始数据中的列)、“cut_set”(切割集,2或4个间隔)和“interval”(间隔编号)分组
数据$bin[i]
需要一个值
means <- ddply(data,.(bin),summarise,mean.a=mean(a),mean.b=mean(b))
for (i in 1:5){
data[paste('bin', i, sep = '')] <- as.numeric(cut2(data$values,g=i*50))
}
# some toy data
d1 <- data.frame(a = 1:10,
b = seq(100, 1000, len = 10))
d1
# a vector of number of intervals
n_int <- 2 * 1:2
library(reshape2)
d2 <- melt(lapply(d1, function(x){
data.frame(x, sapply(n_int, function(i){
as.integer(cut(x, i))
})
)
}),
id.vars = "x", variable.name = "cut_set", value.name = "interval")
d3 <- aggregate(x ~ L1 + cut_set + interval, data = d2, mean)
d3[order(d3$L1, d3$cut_set, d3$interval), ]
# L1 cut_set interval x
# 1 a X1 1 3.0
# 5 a X1 2 8.0
# 3 a X2 1 2.0
# 7 a X2 2 4.5
# 9 a X2 3 6.5
# 11 a X2 4 9.0
# 2 b X1 1 300.0
# 6 b X1 2 800.0
# 4 b X2 1 200.0
# 8 b X2 2 450.0
# 10 b X2 3 650.0
# 12 b X2 4 900.0
library(dplyr)
d1 %>%
melt(id.vars = NULL) %>%
group_by(variable) %>%
do(data.frame(., sapply(n_int, function(i) as.integer(cut(.$value, i))))) %>%
melt(id.vars = c("variable", "value"), variable.name = "cut_set", value.name = "interval") %>%
group_by(variable, cut_set, interval) %>%
summarise(mean = mean(value))