楼主: dxystata
2753 9

[问答] R中根据频数大小产生新变量 [推广有奖]

版主

已卖:302份资源

大师

37%

还不是VIP/贵宾

-

TA的文库  其他...

Software

中英文Ebook

R学习

威望
2
论坛币
183395 个
通用积分
15333.1475
学术水平
208 点
热心指数
271 点
信用等级
174 点
经验
298627 点
帖子
5586
精华
1
在线时间
13632 小时
注册时间
2006-6-21
最后登录
2025-12-22

初级学术勋章 初级热心勋章 中级热心勋章 初级信用勋章

楼主
dxystata 发表于 2013-11-27 12:59:55 |AI写论文
100论坛币
数据集为
var1
AB
AB
AA
BB
AA
BB
AB
AA
AA
AB
BB


类似的变量很多,希望编程实现,要求将字母不同的设为1,字母相同的令频数多或频率大的设为0,另一个设为2
var1 var2
AB     1
AB     1
AA     0
BB     2
AA     0
BB     2
AB     1
AA     0
AA     0
AB     1
BB     2


谢谢!

最佳答案

jmpamao 查看完整内容

给你个啰嗦,不够优美的代码吧 看谁能简洁些的
关键词:新变量 VaR 数据集 字母

本帖被以下文库推荐

  • · R学习|主题: 262, 订阅: 161

沙发
jmpamao 发表于 2013-11-27 12:59:56
给你个啰嗦,不够优美的代码吧
看谁能简洁些的
  1. data <- read.table(text="var1
  2. AB
  3. AB
  4. AA
  5. BB
  6. AA
  7. BB
  8. AB
  9. AA
  10. AA
  11. AB
  12. BB",header=T,stringsAsFactors=F)

  13. #把第一列字母分开,判断是否相同
  14. data$var1<-as.character(data$var1)
  15. dat.sp<-matrix(unlist(strsplit(data$var1,split="")),ncol=2,byrow=T)
  16. dat.1<-dat.sp[,1]!=dat.sp[,2]#逻辑值,字母是否相同


  17. var2<-NULL

  18. var2[dat.sp[,1]!=dat.sp[,2]]=1#字母不同时为1
  19. var2[data$var1==names(which.max(table(data[!dat.1,])))]=0#当字母相同,且频数最大时为0
  20. var2[dat.sp[,1]==dat.sp[,2]&data$var1!=names(which.max(table(data[!dat.1,])))]=2#当字母相同,频数非最大时为2

  21. new.dat <-cbind(var1=data$var1,var2)
  22. as.data.frame(new.dat)
复制代码


已有 1 人评分学术水平 热心指数 收起 理由
qoiqpwqr + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

藤椅
yywan0913 在职认证  发表于 2013-11-27 13:26:11
字母相同的令频数多或频率大的设为0  怎么个多或大?  是最多的或最大的?
都是双字母吧?
只有A,B字母?
已有 1 人评分热心指数 收起 理由
qoiqpwqr + 1 分析的有道理

总评分: 热心指数 + 1   查看全部评分

是什么给了你自信

板凳
dxystata 发表于 2013-11-27 22:25:10
yywan0913 发表于 2013-11-27 13:26
字母相同的令频数多或频率大的设为0  怎么个多或大?  是最多的或最大的?
都是双字母吧?
只有A,B字母? ...
就是两个字母,不一定是A,B字母,也可能是M,N。

报纸
dxystata 发表于 2013-11-27 22:27:25
jmpamao 发表于 2013-11-27 16:48
给你个啰嗦,不够优美的代码吧
看谁能简洁些的
如何自动给新产生的变量值标记呢?如本例0表示AA,1表示AB,2表示BB

地板
jmpamao 发表于 2013-11-27 23:16:10
dxystata 发表于 2013-11-27 22:27
如何自动给新产生的变量值标记呢?如本例0表示AA,1表示AB,2表示BB
上面的代码是 1赋值字母不同的情况
                    0 为字母相同,频率最高的时候,此时AA为频数最大
                   2是字母相同,频数小,  此时BB频数相对小。


自动给变量标记是指什么?
不用判断字母是否相同?
只要是AA就是0, AB 1,BB 2?
var2 <- NULL
var2[var1=="AA"]=0
var2[var1=="AB"]=1
var2[var1=="BB"]=2
  这个意思吗?

7
dxystata 发表于 2013-11-27 23:22:23
jmpamao 发表于 2013-11-27 23:16
上面的代码是 1赋值字母不同的情况
                    0 为字母相同,频率最高的时候,此时AA为频数最 ...
不是!以0 1 2表示,但标签是AA AB BB

8
yywan0913 在职认证  发表于 2013-11-28 08:27:12
dxystata 发表于 2013-11-27 23:22
不是!以0 1 2表示,但标签是AA AB BB
那就简单了啊 ,算下AA和BB 的个数,谁多谁为0,另外一个为2     AB为0就行了呗
已有 1 人评分热心指数 收起 理由
qoiqpwqr + 1 哈哈

总评分: 热心指数 + 1   查看全部评分

是什么给了你自信

9
yywan0913 在职认证  发表于 2013-11-28 08:27:50
yywan0913 发表于 2013-11-28 08:27
那就简单了啊 ,算下AA和BB 的个数,谁多谁为0,另外一个为2     AB为0就行了呗
AB为1    汗  打错了
是什么给了你自信

10
jnuctr 发表于 2013-12-21 09:44:13
谢谢

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

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