我是一个非常新手的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)]
我真的很想写出我需要的每一笔钱,所以我想知道这样的捷径是什么。如果有什么不清楚的话,我很抱歉,这是我第一次真正发布到这个论坛,因为到目前为止我已经能够找到所有其他问题的答案。
提前感谢您的帮助!
答案 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;,因此您获取数据,然后仅选择分组变量(area
和trx
)和将变量归为平均值(所有mean
),然后通过计算平均值对所有非分组变量进行汇总。您可以将sum
替换为median
或sd
或trx
或您想要计算的任何其他统计信息。
为了获得region
和area
所有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
函数,然后让它执行此操作。在那里,我们按area
和total
分组,然后将所有python main.py
值相加。