Мне нужно зациклиться на кадре данных и вычислить функции над переменной, которая зацикливается.R-ddply function over loop variable
Таблица Пример:
table<-data.frame(num1=seq(1,10,len=20), num2=seq(20,30,len=20),
char1=c(rep('a',10), rep('b',10)),
target=c(rep(1,10), rep(0,10)))
создать список переменных:
nums<-colnames(table)[sapply(table, class)=='numeric']
nums<-nums[nums!='target']
И таблицу, я заселить:
planF<-data.frame(deciles=c(1), min=c(1), max=c(1), pos=c(1))
planF<-planF[-1,]
и цикл:
library(plyr)
for (i in 1:length(nums)){
table$deciles<-ntile(table[,nums[i]],5)
plan<-ddply(table, 'deciles', summarize, min=min(nums[i]),
max=max(nums[i]),pos=sum(target))
planF<-rbind(planF,plan)
}
Мне нужно получить min и max переменной por каждый дециль. Но вместо этого я получаю:
deciles min max pos
1 1 num1 num1 4
2 2 num2 num2 4
3 3 <NA> <NA> 2
4 4 <NA> <NA> 0
5 5 <NA> <NA> 0
6 1 num1 num1 4
7 2 num2 num2 4
8 3 <NA> <NA> 2
9 4 <NA> <NA> 0
10 5 <NA> <NA> 0
Для переменной num1 мне нужно, чтобы получить результат:
ddply(table, 'deciles', summarize, min=min(num1),
max=max(num1),pos=sum(target))
deciles min max pos
1 5.736842 7.157895 0
2 7.631579 9.052632 0
3 1.000000 10.000000 2
4 1.947368 3.368421 4
5 3.842105 5.263158 4
И ниже результата делать то же самое с num2.
Я понимаю, что мне нужно ввести переменную с помощью следующей формы:
num1
но код пишет
'num1'
Я попытался с:
min=min(as.name(nums[i]))
Но я получить сообщение об ошибке:
Error in min(as.name(nums[i])) : 'type' (symbol) not valid argument
как я могу вычислить функцию над переменной, которая зацикливается?
Трудно определить, что именно вы пытаетесь сделать. Можете ли вы объяснить это словами? – MJeffryes
@MJeffryes: Привет, мне нужно получить min и max переменной por каждый decile. – GabyLP
Было бы проще, если бы вы показали свой желаемый результат тоже. –