请选择 进入手机版 | 继续访问电脑版
楼主: wuchm
1508 8

[问答] R计算问题,请教专家! [推广有奖]

  • 6关注
  • 1粉丝

博士生

53%

还不是VIP/贵宾

-

威望
0
论坛币
2395 个
通用积分
4.5100
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
5151 点
帖子
230
精华
0
在线时间
236 小时
注册时间
2007-4-24
最后登录
2023-10-5

wuchm 发表于 2015-3-2 18:38:06 |显示全部楼层 |坛友微信交流群
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
假如原始表有:区域、数量、分数三个字段;
通过R计算出数量占比,然后拿数量占比乘以分数加权求和,从而计算出每个区域维度的最终得分。

区域  数量   数量占比      分数    最终得分
A         1         0.33             100         93
A         2         0.67             90

B         3         0.43             100         89
B         4         0.57              80

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:计算问题

回帖推荐

ofzhengyi 发表于6楼  查看完整内容

代码如下:#输入数据 dat

hanson.don 发表于3楼  查看完整内容

应该自己先编个函数,整个步骤如下: qy

hanson.don 发表于4楼  查看完整内容

INDICES: A [1] 93.33333 ------------------------------------------------------- INDICES: B [1] 88.57143 刚才忘记运行了,这是运行结果
ryoeng 在职认证  发表于 2015-3-2 22:00:12 |显示全部楼层 |坛友微信交流群
  1. ?aggregate
复制代码
这应该帮得到吧?

使用道具

hanson.don 发表于 2015-3-2 22:11:00 |显示全部楼层 |坛友微信交流群
应该自己先编个函数,整个步骤如下:
qy<-c('A','A','B','B') ##区域
sl<-c(1,2,3,4) ##数量
fs<-c(100,90,100,80)##分数
dat<-data.frame(qy,sl,fs)##创建数据框
fun<-function(x){ sum(x[,1]*x[,2]/sum(x[,1]))}##编写计算函数
by(cbind(dat$sl,dat$fs),dat$qy,fun)##调用by函数
已有 1 人评分论坛币 收起 理由
李会超 + 20 精彩帖子

总评分: 论坛币 + 20   查看全部评分

使用道具

hanson.don 发表于 2015-3-2 22:11:47 |显示全部楼层 |坛友微信交流群
hanson.don 发表于 2015-3-2 22:11
应该自己先编个函数,整个步骤如下:
qy
INDICES: A
[1] 93.33333
-------------------------------------------------------
INDICES: B
[1] 88.57143
刚才忘记运行了,这是运行结果

使用道具

wuchm 发表于 2015-3-2 22:33:10 |显示全部楼层 |坛友微信交流群
hanson.don 发表于 2015-3-2 22:11
INDICES: A
[1] 93.33333
-------------------------------------------------------
非常感谢!专家哈

能否将输出结果放在原始表格后面那列呢?按照上面的列表展示那样;
或者将输出结果以列表形式单独输出sheet2表到excel(假定原表是excel的sheet1表),谢谢!

使用道具

ofzhengyi 发表于 2015-3-4 11:02:20 |显示全部楼层 |坛友微信交流群
wuchm 发表于 2015-3-2 22:33
非常感谢!专家哈

能否将输出结果放在原始表格后面那列呢?按照上面的列表展示那样;
代码如下:#输入数据
dat<-NULL
dat$区域<-c("A","A","B","B")
dat$数量<-c(1,2,3,4)
dat$分数<-c(100,90,100,80)
dat<-data.frame(dat)
#分析
library(dplyr)
dat<-group_by(dat,区域)
dat<-mutate(dat,数量占比=数量/sum(数量))
dat<-mutate(dat,最终得分=sum(数量占比*分数))


输出结果如下:
  区域 数量 分数  数量占比 最终得分
1    A    1  100 0.3333333 93.33333
2    A    2   90 0.6666667 93.33333
3    B    3  100 0.4285714 88.57143
4    B    4   80 0.5714286 88.57143



已有 1 人评分论坛币 收起 理由
admin_kefu + 30 热心帮助其他会员

总评分: 论坛币 + 30   查看全部评分

士不可不弘毅,任重而道远。

使用道具

ofzhengyi 发表于 2015-3-4 11:13:33 |显示全部楼层 |坛友微信交流群
帖子里的代码不知道为什么会全乱掉,直接上传代码文件吧。

test.zip

339 Bytes

本附件包括:

  • test.r

士不可不弘毅,任重而道远。

使用道具

wuchm 发表于 2015-3-4 20:29:13 |显示全部楼层 |坛友微信交流群
ofzhengyi 发表于 2015-3-4 11:13
帖子里的代码不知道为什么会全乱掉,直接上传代码文件吧。
非常感谢!
麻烦看下这个链接的问题:https://bbs.pinggu.org/forum.php? ... =3596952&page=1

使用道具

wuchm 发表于 2015-3-22 16:36:21 |显示全部楼层 |坛友微信交流群
ofzhengyi 发表于 2015-3-4 11:02
代码如下:#输入数据
dat
有个小问题:通过计算新增的变量“数量占比”,为什么在我的电脑上运行后出现下面的提示呢?
我改成英文的名称就OK了,貌似不识别中文,这是什么原因啊?

> dat<-NULL
> dat$区域<-c("A","A","B","B")
> dat$数量<-c(1,2,3,4)
> dat$分数<-c(100,90,100,80)
> dat<-data.frame(dat)
> library(dplyr)
> dat<-group_by(dat,区域)
> dat<-mutate(dat,数量占比=数量/sum(数量))
> dat<-mutate(dat,最终得分=sum(数量占比*分数))
Error in mutate_impl(.data, dots) : object '数量占比' not found

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 07:00