楼主: RRRUP
1304 9

[问答] R语言 ifelse问题 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

大专生

10%

还不是VIP/贵宾

-

威望
0
论坛币
2 个
通用积分
1.0004
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
157 点
帖子
14
精华
0
在线时间
62 小时
注册时间
2018-12-20
最后登录
2020-6-6

楼主
RRRUP 发表于 2019-11-30 17:29:43 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
现有数据如下图所示,想求得系数  LB  = max  /(max+相对)
例:有16个数据V1、V2、V3、V4

、V5、V6、V7、V8、V9、V10、V11、V12、V13、V14、V15、V16


若V1最大,则LB=V1/(V1+V9),

若V2最大,则LB=V2/(V2+V10),


若V3最大,则LB=V3/(V3+V11),


若V4最大,则LB=V4/(V4+V12), QQ截图20191130172402.jpg


以此类推,请问使用R语言应该如何实现?


二维码

扫码加我 拉你入群

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

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


沙发
owenqi 在职认证  学生认证  发表于 2019-11-30 22:04:25
这样行不行?
  1. df <- as.data.frame(round(matrix(rnorm(160), ncol = 16, nrow = 10),3))

  2. maxid <- apply(df[,1:8], 1, which.max)
  3. lb <- apply(df[,1:8], 1, max)

  4. for(i in 1:nrow(df)){
  5.   lb[i] <- lb[i]/(lb[i] + df[,9:16][i, maxid[i]])
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

藤椅
18801393655 学生认证  发表于 2019-11-30 22:42:27 来自手机
RRRUP 发表于 2019-11-30 17:29
现有数据如下图所示,想求得系数  LB  = max  /(max+相对)
例:有16个数据V1、V2、V3、V4[/b ...
感谢~

板凳
RRRUP 发表于 2019-12-1 00:36:50
owenqi 发表于 2019-11-30 22:04
这样行不行?
非常感谢 但是用了您的方法算出来还是有问题 最大值也可能出现在9-16 列之间

报纸
RRRUP 发表于 2019-12-1 00:36:53
owenqi 发表于 2019-11-30 22:04
这样行不行?
非常感谢 但是用了您的方法算出来还是有问题 最大值也可能出现在9-16 列之间

地板
owenqi 在职认证  学生认证  发表于 2019-12-1 06:55:11
RRRUP 发表于 2019-12-1 00:36
非常感谢 但是用了您的方法算出来还是有问题 最大值也可能出现在9-16 列之间
所以你能把问题再描述清楚吗,我看你的描述(以此类推),以为是前8列的最大值加上对应位置的位移,你能举一个如果9-16出现最大值的情况吗?

7
RRRUP 发表于 2019-12-1 10:11:06
owenqi 发表于 2019-12-1 06:55
所以你能把问题再描述清楚吗,我看你的描述(以此类推),以为是前8列的最大值加上对应位置的位移,你能举 ...
是这样:
如果最大值在第1列,那么该系数为第1列的数值与(第9列(1+16/2=9)的数值+第1列数值)之比。
如果最大值在第7列,那么该系数为第7列的数值与(第15列(7+16/2=15)的数值+第7列数值)之比。
如果最大值在第14列,那么该系数为第14列的数值与(第6列(14-16/2=6)的数值+第14列数值)之比。
如果最大值在第16列,那么该系数为第16列的数值与(第8列(16-16/2=8)的数值+第16列数值)之比。
例如上面的图片所示,第一行中,最大值2.891在第9列,对应的第1列的值为1.181,那么LB=2.891/(2.891+1.181),就是这个意思,有什么办法可以解决嘛

8
owenqi 在职认证  学生认证  发表于 2019-12-1 13:24:18
那应该需要多加一行代码
  1. df <- as.data.frame(round(matrix(rnorm(160), ncol = 16, nrow = 10), 3))

  2. relid <- (apply(df, 1, which.max) + 8) %% 16
  3. relid[which(relid < 9)] <- relid[which(relid < 9)] + 1

  4. lb <- apply(df, 1, max)

  5. for(i in 1:nrow(df)){lb[i] <- lb[i]/(lb[i] + df[i,relid[i]])}
复制代码

9
RRRUP 发表于 2019-12-1 15:45:45
owenqi 发表于 2019-12-1 13:24
那应该需要多加一行代码
你好 运行了一下代码 发现结果仍然不正确 如果删掉这一行relid[which(relid < 9)] <- relid[which(relid < 9)] + 1 结果就是正确的了  但是由于在第50行时最大值在第8列  relid就等于0  因此程序会报错  想问下您这个语句是什么意思呢relid[which(relid < 9)] <- relid[which(relid < 9)] + 1

10
RRRUP 发表于 2019-12-1 16:41:00
owenqi 发表于 2019-12-1 13:24
那应该需要多加一行代码
稍微改动了下 运行出正确结果了 非常感谢您!
df<- read.csv("C:/D/CROWNjiu/R/BOXPLOT/T30/mmc16.csv",row.names = 1)
relid<-(apply(df,1,which.max)+8)%%16
relid[which(relid < 1)] <- relid[which(relid <1 )] + 16
lb<-apply(df,1,max)
for(i in 1:nrow(df)){lb <- lb/(lb + df[i,relid])}
View(lb)

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-7 22:15