2016-11-13 16 views
0

私はいくつかの大都市圏のデータがあり、他のデータが適用されている行の1つはその領域の格付けです。私が抱えている問題は、行のNA値だけです。特定の大都市圏の平均格付けの取得

データはいくらか次のようになります。

"ID", "Name", "Type", "Amount", "Rating", "Date" 
1,"Location A", "SomeType", 8000, 9.2, "2015-04-10" 
2,"Location B", "SomeType", 2300, 7.4, "2015-04-10" 
3,"Location C", "SomeType", 5400, NA, "2015-04-10" 
4,"Location A", "SomeType", 4300, 8.5, "2015-04-10" 
5,"Location B", "SomeType", 8670, 6.9, "2015-04-10" 
6,"Location A", "SomeType", 7600, NA, "2015-04-10" 
7,"Location A", "SomeType", 3400, 8.2, "2015-04-10" 
8,"Location B", "SomeType", 6500, NA, "2015-04-10" 
9,"Location C", "SomeType", 7800, 9.2, "2015-04-10" 

は最終的に私が場所ごとに評価して明らかにこれ

Name   Average Rating 
Location A {average rating} 
Location B {average rating} 
Location C {average rating} 

ようにそれをしたいが、それはNA値をNULLいっています。データはCSVから直接読み取られます。 NAの値を除いた各場所の平均評価を得るには、どのようにこれにアプローチしますか?

私はplyrでそれを試してみましたが、それは今NULLを返します。

mean_ratings = ddply(data, .(Name), summarize, Rating=mean(Rating)) 
+1

をna.rm」として知られている引数があります= "in mean()。 TRUEに設定する –

答えて

1
library(data.table) 
dt = data.table("Name"=c("Location A","Location B","Location C","Location A","Location B", 
        "Location A","Location A","Location B","Location C"), 
      "Rating"=c(9.2, 7.4, NA, 8.5,6.9,NA,8.2,NA,9.2)) 

> dt 
     Name Rating 
1: Location A 9.2 
2: Location B 7.4 
3: Location C  NA 
4: Location A 8.5 
5: Location B 6.9 
6: Location A  NA 
7: Location A 8.2 
8: Location B  NA 
9: Location C 9.2 

dt[, mean(Rating, na.rm = T),by = "Name"] 
     Name  V1 
1: Location A 8.633333 
2: Location B 7.150000 
3: Location C 9.200000 

plyrソリューション:

ddply(dt, "Name", function(x) mean(x$Rating,na.rm = T)) 
関連する問題