【发布时间】:2013-01-21 16:44:07
【问题描述】:
我是 R 编程的初学者(使用它进行数据分析)
我有以下数据。 (精简版)
state storeid sales
CA 1 40,000
CA 2 44,000
CA 3 38000
MN 1 26000
MN 2 25500
我需要一个返回表现最佳/表现不佳的商店的函数。
我写了以下函数。
storeinfo<-function(num="top") {
df<-read.csv("store.csv")
bestVal <- 1;
if (!missing(num)) {
if(is.numeric(num)){
bestVal = as.numeric(num);
}
if(num=="top"){
bestVal <-1
}
if ( num=="poor"){
bestVal<-0
}
}
print(bestVal)
data2<-subset(df[,c(1,2,3)])
data2<-data2[order(as.numeric( data2$sales), data2$storeid,na.last=TRUE,decreasing=TRUE), ]
idx<-tapply(1:NROW(data2),data2$state,"[",bestVal)
idx1<-tapply(1:NROW(data2),data2$state,"[",1)
return (data.frame(data2[idx1,1],data2[idx,2:3]))
}
当我执行上述功能时,我看到以下内容
> head(storeinfo(1))
[1] 1
data2.idx1..1. storeid sales
2 CA 2 44,000
4 MN 1 26000
a) 如何抑制第一列 2,4 等?(索引) b) 如何找到销量低的店铺? c) 如何为返回的数据框设置不同的列名。
【问题讨论】:
-
第一列不是一个;这些是您的 data.frame 的行名。如果您想用 1、2、3 等替换它们,您可以使用
rownames(yourobject) <- NULL。您还可以使用colnames(yourobject) <- c("state", "storeid", "sales")更改列名称。其余的对我来说太混乱了。特别是,对于state和storeid,您没有定义“商店”的含义。 -
retdf
-
retdf
-
应该是
rownames(retdf) <- NULL。在打印 data.frame 时,您仍然会看到一列行索引(1、2、3 等),因为 R 就是这样做的。你不应该太担心它。例如,如果您要将最终的 data.frame 写入文件,您可以选择是否包含行名。