【发布时间】:2018-08-02 14:55:54
【问题描述】:
考虑 R 中的以下数据框:
TYPE VARIAVEL VALOR
A OPER_RELAC_VARIAVEL1 100
A OPER_RELAC_VARIAVEL2 200
A OPER_RELAC_VARIAVEL3 300
B OPER_RELAC_VARIAVEL1 100
B OPER_RELAC_VARIAVEL2 200
B OPER_RELAC_VARIAVEL3 300
A CLI_RELAC_VARIAVEL1 450
A CLI_RELAC_VARIAVEL2 320
A CLI_RELAC_VARIAVEL3 110
我想根据VARIAVEL 和TYPE 的根来获取每个VALOR 的相关性。我没有以VARIAVEL 为根的列,但它会在第二个_ 之前出现(在此示例中为OPER_RELAC 和CLI_RELAC)。
预期结果是:
TYPE VARIAVEL VALOR RELEVANCE
A OPER_RELAC_VARIAVEL1 100 0.167
A OPER_RELAC_VARIAVEL2 200 0.333
A OPER_RELAC_VARIAVEL3 300 0.500
B OPER_RELAC_VARIAVEL1 100 0.167
B OPER_RELAC_VARIAVEL2 200 0.333
B OPER_RELAC_VARIAVEL3 300 0.500
A CLI_RELAC_VARIAVEL1 450 0.511
A CLI_RELAC_VARIAVEL2 320 0.364
A CLI_RELAC_VARIAVEL3 110 0.125
因为,例如,对于类型 A 和根变量 CLI_RELAC,450 代表总数的 51.1%。
我已经完成了这个命令序列:
1) 使用库stringr 生成带有根变量的列
dados$VARIAVEL_MAE <- str_match(dados$VARIAVEL, "^([^_]+[_][^_]+)")[,2]
感谢R:how to get grep to return the match, rather than the whole string
2) 在一个新的数据框中总结这个新列聚合的总数
TOTAIS <- aggregate(VALOR ~ Type + VARIAVEL_MAE, data = dados, sum)
names(TOTAIS) <- c('Type', 'VARIAVEL_MAE', 'TOTAL')
3) 使用建议的 here 合并这两个数据帧
dados <- merge(TOTAIS, dados, by = c('Type', 'VARIAVEL_MAE'))
dados$RELEVANCIA <- dados$VALOR / dados$TOTAL;
有没有更聪明的方法或者我确实需要所有这些步骤?
我的问题是因为在 R 中,我所做的一切总是可以被更快更小的东西所取代。
【问题讨论】: