我有dataset调用df,如下所示:
Title Time Gross
a 12/21 2313
b 11/12 1298
c 4/09 10034
d 09/30 3498
e 10/31 2375
y 01/10 8492 我希望编写一个函数,返回具有最大Title的3个条目的Gross和Gross。
我试过这样做:
names.revenues <- function(num, data){
i = 1
for(i in 1:num){
inds = which.max(data$Gross)
names[i] = data$Title[inds]
revenues[i] = data$Gross[inds]
data = data[-inds, ]
i = i + 1
}
return(list(names = names, revenues = revenues))
}
names.revenues(3, df)但这不管用,请给我个提示。谢谢!
发布于 2015-10-29 21:05:08
您的函数有一些错误,下面是一个可能的工作版本:
names.revenues <- function(num, data){
# initialize names and revenues with NAs
names <- rep.int(NA,num)
revenues <- rep.int(NA,num)
for(i in 1:num){
inds = which.max(data$Gross)
names[i] = data$Title[inds]
revenues[i] = data$Gross[inds]
data = data[-inds, ]
}
return(list(names = names, revenues = revenues))
}例子:
df <- data.frame(Title=letters[1:10],
Time=format(format='%m/%d',Sys.Date()+1:10),
Gross=c(10,200,40,500,70,500,20,300,10,50),
stringsAsFactors=FALSE)
# > df
# Title Time Gross
# 1 a 10/30 10
# 2 b 10/31 200
# 3 c 11/01 40
# 4 d 11/02 500
# 5 e 11/03 70
# 6 f 11/04 500
# 7 g 11/05 20
# 8 h 11/06 300
# 9 i 11/07 10
# 10 j 11/08 50
res1 <- names.revenues(5, df)
# > res 1
# $names
# [1] "d" "f" "h" "b" "e"
#
# $revenues
# [1] 500 500 300 200 70但是,如果使用这种(更有效)的一行程序,则可以获得基本相同的结果:
res2 <- head(df[order(df$Gross,decreasing=TRUE),],5)
# > res2
# Title Time Gross
# 4 d 11/02 500
# 6 f 11/04 500
# 8 h 11/06 300
# 2 b 10/31 200
# 5 e 11/03 70https://stackoverflow.com/questions/33424066
复制相似问题