【问题标题】:R function returning data frame (extra column)R函数返回数据框(额外列)
【发布时间】: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) &lt;- NULL。您还可以使用 colnames(yourobject) &lt;- c("state", "storeid", "sales") 更改列名称。其余的对我来说太混乱了。特别是,对于statestoreid,您没有定义“商店”的含义。
  • retdf
  • retdf
  • 应该是rownames(retdf) &lt;- NULL。在打印 data.frame 时,您仍然会看到一列行索引(1、2、3 等),因为 R 就是这样做的。你不应该太担心它。例如,如果您要将最终的 data.frame 写入文件,您可以选择是否包含行名。

标签: r function dataframe


【解决方案1】:

这样做

min_max_sales = c(which.min(df$sales), which.max(df$sales)) # return row numbers
df[min_max_sales,]

更新。

如果您需要对数据框进行排序并获得销售额排名第 n 的商店,这是使用 plyr 包的更好方法

plyr::arrange(df, sales)[n,]

【讨论】:

  • 我会试试的。我需要找到 2ed best、3ed best stores 等。这就是原因,我将“num”参数传递给函数。
  • 您只需要按销售额排序吗?在这种情况下,您可以安装plyr 包并执行arrange(df, sales)。这将为您提供按销售额排序的数据框,您可以提取第一、第二或第三最佳商店。
猜你喜欢
  • 2023-03-09
  • 2018-01-20
  • 1970-01-01
  • 2016-08-27
  • 2015-06-24
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多