楼主: 熊小贤
3202 22

[问答] 请教一个R语言编程小问题 [推广有奖]

11
nieqiang110 学生认证  发表于 2013-10-14 00:06:03
上面这个例子可以,我试试后发给你

12
nieqiang110 学生认证  发表于 2013-10-14 00:15:14
> #read the data
> data<-read.csv("data.csv",header=T)
> data$name<-gsub(","," ",data$name)
> regexp<-"([[:alpha:]]+) ([[:alpha:]]+) ([[:alpha:]]+)"
> data$name<-sub(pattern=regexp,replacement="\\1",x=data$name);data$name
[1] "jin joy" "jou"     "po yu"   "gh"      "kl yu"   "tt"     
[7] "ttk"     "dd"      "irr"     "jii"   
> regexp<-"([[:alpha:]]+) ([[:alpha:]]+)"
> data$name<-sub(pattern=regexp,replacement="\\1",x=data$name);data$name
[1] "jin" "jou" "po"  "gh"  "kl"  "tt"  "ttk" "dd"  "irr" "jii"
> data
   id name value
1   1  jin     1
2   2  jou     6
3   3   po     3
4   4   gh     3
5   5   kl     2
6   6   tt     5
7   7  ttk     1
8   8   dd     9
9   9  irr     2
10 10  jii     3
楼主:你好!我将运算的程序发给你。我用的是RStadion。刚才程序出错,我检查了一下,原因在于你数据文件中的逗号是中文格式的逗号,改成英文格式下的逗号就可以了。这次我是亲自用你的数据运算出来了。

data_name.rar
下载链接: https://bbs.pinggu.org/a-1417616.html

1.03 KB

数据以及R程序

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

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

13
熊小贤 发表于 2013-10-14 09:28:01
nieqiang110 发表于 2013-10-14 00:15
> #read the data
> data data$name regexp data$name regexp data$name data
   id name value
正则表达真的看不懂,所以没弄明白 真是谢谢您了 又学习了
下面的统计R浪人也给了不错的答案 我看他论坛币挺少的 我最佳先给他了
我一会儿会另开一个悬赏 记得来领论坛币

14
熊小贤 发表于 2013-10-14 09:30:23
nieqiang110 发表于 2013-10-14 00:15
> #read the data
> data data$name regexp data$name regexp data$name data
   id name value
正则表达不太懂 所以之前一直没看明白 真的谢谢您了 给我解答了这么多
不过下面统计R浪人也给了不错的答案 我看他论坛币挺少的 最佳先给他了
一会儿我会令开一个悬赏 记得来领取啊

15
kaifengedu 发表于 2013-10-14 13:08:22
统计R浪人 发表于 2013-10-13 10:26
> id name value newdata newdata
   id name value
1   1  jin     1
一点建议,if语句可以不要,直接写为
  1. rm(list=ls())
  2. id<-1:10
  3. name<-c("jin, joy","jou"," po, yu ","gh","kl, yu","tt","ttk","dd,bbs,tt","irr","jii ")
  4. value<-c(1,6,3,3,2,5,1,9,2,3)
  5. data<-data.frame(id,name,value)
  6. newname<-as.character(data$name)
  7. newid<-0
  8. newvalue<-0
  9. j<-1
  10. for(i in 1:nrow(data))
  11. {
  12.   t<-strsplit(as.character(data$name[i]), ",")
  13.   newid[j:(j-1+ncol(t(t[[1]])))]<-data$id[i]
  14.   newname[j:(j-1+ncol(t(t[[1]])))]<-t[[1]]
  15.   newvalue[j:(j-1+ncol(t(t[[1]])))]<-data$value[i]
  16.   j<-ncol(t(newid))
  17.   j<-j+1
  18. }
  19. id<-newid
  20. name<-newname
  21. value<-newvalue
  22. newdata<-data.frame(id,name,value)
  23. newdata
复制代码

16
统计R浪人 发表于 2013-10-14 17:39:05
kaifengedu 发表于 2013-10-14 13:08
一点建议,if语句可以不要,直接写为
不错,学习了,以后多交流

17
kaifengedu 发表于 2013-10-15 07:22:37
统计R浪人 发表于 2013-10-14 17:39
不错,学习了,以后多交流
没问题,以后互相学习!

18
jmpamao 发表于 2013-10-15 18:31:13
也可以不用循环的
  1. data <- read.table(text="id             name           value
  2. 1             jin,joy           1
  3. 2              jou                6
  4. 3              po,yu           3
  5. 4              gh                 3
  6. 5              kl,yu             2
  7. 6              tt                   5
  8. 7              ttk                 1
  9. 8              dd,bbs,tt    9
  10. 9              irr                  2
  11. 10            jii                   3",header=T)
  12. data$name <- as.character(data$name)
  13. data2 <- t(do.call(cbind,      
  14.                    lapply(1:nrow(data),function(i){         
  15.                      sapply(unlist(strsplit(data[i,2],",")),c,data[i,c(1,3)],USE.NAMES=F)
  16.                    })
  17. ) )      
  18. data2 <- as.data.frame(data2)
  19. data2 <- data2[,c(2,1,3)]
  20. data2
复制代码
> data2
   id  V1 value
1   1 jin     1
2   1 joy     1
3   2 jou     6
4   3  po     3
5   3  yu     3
6   4  gh     3
7   5  kl     2
8   5  yu     2
9   6  tt     5
10  7 ttk     1
11  8  dd     9
12  8 bbs     9
13  8  tt     9
14  9 irr     2
15 10 jii     3

另外向  @qoiqpwqr问好
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
famousid + 1 + 1 + 1 高手辈出啊

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

19
D调、的华丽~ 发表于 2013-10-15 22:21:16
统计R浪人 发表于 2013-10-13 10:26
> id name value newdata newdata
   id name value
1   1  jin     1
好厉害!

20
统计R浪人 发表于 2013-10-16 07:53:06
jmpamao 发表于 2013-10-15 18:31
也可以不用循环的> data2
   id  V1 value
1   1 jin     1
不用循环这样效率更高,以后要向楼主学习多使用lapply、sapply写代码

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 19:52