在R中对名称与条件

时间:2017-07-12 19:00:50

标签: r

我是一个非常新手的R程序员,试图将SAS代码转换为R代码。 我需要总结按组分隔的不同变量的值。例如,我的数据看起来像这样:

区域ID |地区| TRx_01_02_2014 | TRx_01_03_2014 | TRx_01_04_2014 |等...

--- --- 001 | --EAST-- | ---------- 2.034 -------- | ---------- 1.093-- ------ | --------- 3.227 -----------

--- --- 002 | --EAST-- | ---------- 0.119 -------- | ---------- 4.002-- ------ | --------- 7.327 -----------

--- --- 001 | --WEST- | ---------- 2.223 -------- | ---------- 5.613 --- ----- | --------- 5.772 -----------

有超过80种不同的TRx_xx_xx_xxxx变量对应不同的日期。我需要为每个日期总结每个区域的TRx。

旧的SAS代码如下所示:

proc means data=example sum;
    class Region Area_ID;
    var TRx:;
    run;

“var TRx:;” line将选择名称以字符串“TRx”开头的每个变量,然后按上面列出的类(Region& Area_ID)对该变量求和。我正在寻找一种在R中这样做的等效方法。写出TRx变量的每个日期都是非常繁琐的。我已经看过关于grepl函数的其他帖子,它们会查找模式,但是我不太确定如何在像我一直用来完成汇总函数的data.table函数中实现它。

要获得总和,我一直在使用此代码:

>exampleList=Example[,list(sumTRx1=sum(TRx_01_02_2014),sumTRx2=sum(TRx_01_03_2014)),by=.(Region,Area_ID)]

我真的很想写出我需要的每一笔钱,所以我想知道这样的捷径是什么。如果有什么不清楚的话,我很抱歉,这是我第一次真正发布到这个论坛,因为到目前为止我已经能够找到所有其他问题的答案。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

使用R。

中的# install.packages('dplyr') library(dplyr) df = data_frame(area=c('001', '002', '001', '001'), region=c('east', 'east', 'east', 'west'), trx1=rnorm(4), trx2=rnorm(4), trx3=rnorm(4)) df # A tibble: 4 x 5 # area region trx1 trx2 trx3 # <chr> <chr> <dbl> <dbl> <dbl> # 1 001 east 0.6401357 -0.1601207 -0.4541891 # 2 002 east -1.0460221 -0.4339913 0.7096318 # 3 001 east -1.7173618 -0.9321431 1.9172886 # 4 001 west 1.2755188 -0.5356680 -1.7411916 df %>% select(region, area, starts_with('trx')) %>% group_by(region, area) %>% summarize_all(mean) # A tibble: 3 x 5 # Groups: region [?] # region area trx1 trx2 trx3 # <chr> <chr> <dbl> <dbl> <dbl> # 1 east 001 0.7321764 -0.4147787 0.2116776 # 2 east 002 0.2855519 0.4735731 -0.4301295 # 3 west 001 0.5299542 -0.7694106 0.2509183 包可以轻松完成此操作
%>%

region运算符读作&#34;然后&#34;,因此您获取数据,然后仅选择分组变量(areatrx)和将变量归为平均值(所有mean),然后通过计算平均值对所有非分组变量进行汇总。您可以将sum替换为mediansdtrx或您想要计算的任何其他统计信息。

更新

为了获得regionarea所有df %>% select(region, area, starts_with('trx')) %>% mutate(total = rowSums(select(df, starts_with('trx')))) %>% group_by(region, area) %>% summarise(total = sum(total)) # A tibble: 3 x 3 # region area total # <chr> <chr> <dbl> # 1 east 001 -2.869915 # 2 east 002 1.615576 # 3 west 001 -2.540118 个变量的总价值,我们只需更改一些内容:

mutate

trx行是我们为每行创建所有rowSums变量的总和的地方。我们只需将数据框输入region函数,然后让它执行此操作。在那里,我们按areatotal分组,然后将所有python main.py值相加。