如何计算R中的频率(计数)变量?

时间:2016-02-17 08:22:14

标签: r function machine-learning

我已经开始逐渐从Excel转移到R,但我仍然在(相对简单的)计算方面遇到一些困难。

我想创建变量 x 的频率版本,让我们称之为" xfrequency"

请参阅下面的数据示例。

在一定时期(国家/年)期间,期望变量xfrequency应基本上计算x的数量。在样本数据中,观察期是从1990年到1995年。因此,1994年加拿大总共收到4 x。

也许有相关的功能呢?谢谢!

country year    x   xfrequency
CAN     1990    1   1
CAN     1991    0   0
CAN     1992    1   2
CAN     1993    0   0
CAN     1994    2   4
CAN     1995    1   5
USA     1990    0   0
USA     1991    2   2
USA     1992    1   3
USA     1993    0   0
USA     1994    1   4
USA     1995    0   0
GER     1990    NA  NA
GER     1991    1   1
GER     1992    0   0
GER     1993    1   2
GER     1994    2   4
GER     1995    1   5

3 个答案:

答案 0 :(得分:2)

data.table示例假设您的数据集位于名为index++;的变量中:

function Player(name, money, bet, tmp, diceSum) {
    this.name = name;
    this.money = money;
    this.bet = bet;
    this.tmp = tmp;
    this.diceSum = diceSum;
  }
var players = [];
var name, money;
var numOfPlayers = 5;
$("#submit").click(
    function() {
       name = $("input[name='name']").val();
       money = $("input[name='money']").val();
       players.push(new Player(name, money, 0, 0, 0));
       $("input[name='name']").val("");
       $("input[name='money']").val("");
       for( var i = 0; i< numOfPlayers; i++) {
         (function(index){
            $("#log").append(players[index].name + "<br>");
            index++;
         })(i);
       }
     }
);

给出了:

        var pushNotification = PushNotification.init({
            "android": {
                "senderID": "1234567890"
            },
            "ios": {"alert": "true", "badge": "true", "sound": "true"}, 
            "windows": {} 
        });

        pushNotification.on('registration', function(data) {
            console.log("registration event");
            console.log(JSON.stringify(data));
        });

        pushNotification.on('notification', function(data) {
            console.log("notification event");
            console.log(JSON.stringify(data));

            pushNotification.finish(function () {
                console.log('finish successfully called');
            });
        });

        pushNotification.on('error', function(e) {
            console.log("push error");
        });

这不完全是您的预期输出,但根据您提供的说明,xfreq列似乎是您正在寻找的。

为了获得准确的输出,我们可以在x为0时将xfreq重置为0:

data

或者通过测试的一次通过:

library(data.table)
setDT(data)
data[is.na(x),x := 0] # Remove the NA as a sum of anything with NA is NA
data[, xfreq := cumsum(x), by=country]

答案 1 :(得分:2)

基础R替代方案:

extlib.dijit.BootstrapPickerList3

给出:

mydf <- transform(mydf, xfreq = ave(x, country, FUN = function(x) cumsum(!is.na(x))))
mydf[mydf$x==0 | is.na(mydf$x), "xfreq"] <- 0

答案 2 :(得分:0)

您可以使用库(dplyr)。

library(dplyr)
sum_data <- data %>% group_by(country) %>% summarise(xfrequency = sum(x, na.rm=T)).

我只是按国家/地区对您的数据进行分组,并为该国家/地区的所有期间添加了x的总和。