将SDcols与ifelse和分组变量混合

时间:2017-02-20 16:16:37

标签: r function group-by data.table

这个问题是我发布的上一个问题的延续,但是当我进行分组时,我意识到这个问题失败了。 link

如果交易发生在特定时间段内,我需要计算变量的平均值,按客户端符号分组。

我的尝试:

library(data.table)
client_id <- c("A", "A", "B", "B", "B", "B", "B", "A", "A", "B", "B")
value <- c(10, 35, 20, 30, 50, 40, 30, 40, 30, 40, 10)
period_30 <- c(1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0)
period_60 <- c(1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0)
sign <- c("D", "D", "D", "D", "C", "C", "C", "D", "D", "D", "D")

test <- data.frame(client_id, value, period_30, period_60, sign)

result <- setDT(test)[, lapply(.SD, function(i) {ifelse(1 %in% i, mean(test$value), 0)}),
                     .SDcols = period_30:period_60,
                     by=.(client_id, sign)]

上面的代码我得到的结果是无稽之谈,但我相信我走在正确的轨道上。我只是不确定如何修复ifelse语句。

预期结果为

Client ID     average_value_period30    average_value_period60
    A                    22.5                       29

任何?

1 个答案:

答案 0 :(得分:2)

我们需要

public class triangle {
    public static void main ( String arg[] ){

        System.out.print("Enter Triangle Size : ");
        int num=0;
        try{
            num=Integer.parseInt( read.readLine() );
        } catch(Exception Number){
            System.out.println("Invalid Number!");
        }
            for(int i=1;i<=num;i++){
                for(int j=1;j<num-(i-1);j++){
                    System.out.print(" ");
                }
                for(int k=1;k<=i;k++){
                    System.out.print("*");
                    for(int k1=1;k1<k;k1+=k){

                        System.out.print("*");
                    }
                }
                System.out.println();
            }
    }
}