2016-06-10 71 views
0

我有两列“名称”和“价格”。我想确定“名称”列中每个组/类别的价格的标准偏差。这些列是在R的数据帧我如何确定同一列中多个类别的标准偏差R

    Name Price 
1    Llandudno 21700000 
2    Llandudno 15500000 
3    Llandudno 9800000 
4    Hout Bay 2995000 
+2

请提供[MCVE] –

+0

我会记住这一点。欢呼声 –

回答

1

假设你有一个名为df的数据框。下面是使用aggregate碱R法:

aggregate(Price ~ Suburb, data=df, FUN=sd) 

这创建了由名称具有标准偏差一个data.frame。


aggregate使用data.table包等效,情况如下:

library(data.table) 
setDT(df) 

df[, list("Name"=sd(Price)), by=.(Suburb)] 

数据

df <- read.table(header=TRUE, text="Suburb Price 
Llandudno 21700000 
       Llandudno 15500000 
       Llandudno 9800000 
       Hout_Bay 2995000 
       Hout_Bay 3995000") 
1

可以使用dplyr的形式,

library(dplyr) 
df %>% 
    group_by(Name) %>% 
    summarise(new = sd(Price)) 

#Source: local data frame [2 x 2] 

#  Suburb  new 
#  (chr) (dbl) 
#1 Hout Bay  NaN 
#2 Llandudno 5951750 

注意,“豪特湾”给出的NaN这是意料之中的,因为你只能有一个值

+1

这是我第一次接触管道操作员。非常感谢你! –

+0

@Richard没问题。 – Sotos

1

我们可以使用sqldf。好处是,如果我们也在sql上工作,我们不需要翻译代码。

library(sqldf) 
sqldf("SELECT Suburb, stdev(Price) AS SDPrice 
     FROM df1 
     GROUP BY Suburb") 
#  Suburb Price 
#1 Hout Bay  0 
#2 Llandudno 5951750 
+0

这种方法有多快? –

+1

@MaratTalipov如果我们正在处理庞大的数据库,那么在数据库上使用'sql'命令会比在R中读取它快。但是,如果它是一个小数据集,R中的sql命令会比较慢。 – akrun

+0

数据集不大可惜。 'sqldf'很棒。我很感激。 –