楼主: cherishlife123
2306 12

[问答] 编程处理数据!来挑战下吧 [推广有奖]

11
cherishlife123 学生认证  发表于 2014-11-13 15:43:17
meishanjia1900 发表于 2014-11-12 22:18
已经看过楼主给的数据。我的方法是这样:

(1)在EXCEL软件中,先动用VBA工具在该数据表的空白处添加一个 ...
不得不说,你是大神!只是有R的方法吗?我要处理的不仅仅是这一个表。。。

12
meishanjia1900 发表于 2014-11-13 18:41:11
cherishlife123 发表于 2014-11-13 15:43
不得不说,你是大神!只是有R的方法吗?我要处理的不仅仅是这一个表。。。
我不知道你要处理多少张表格,如果仅处理格式类似的表格,可以用以下方法——应你的要求,改用R实现

(1)将“2012-Export.xls”文件先另存为逗号分隔的CSV文件格式。

       (R可以直接读取EXCEL文件,但我没尝试过。还是转换为CSV这种方便的格式吧)

(2)启动R,运行以下R脚本(假设“2012-Export.csv”保存在C盘):

  1. a = read.csv(file = "c:/2012-Export.csv", header = FALSE)
  2. notNull = apply(a, 1, function(x) sum(x != ""))
  3. b = subset(a, notNull == max(notNull))

  4. d = t(apply(b, 1, function(x) sapply(x, function(y) {
  5.                            
  6.                                 ySep = substring(y, 1:nchar(y), 1:nchar(y))
  7.                                 yChar = paste(ySep[ySep != " "], collapse = "")
  8.                                 return(yChar)
  9.                            
  10.                             })))

  11. e = as.matrix(d[2:nrow(d), 2:ncol(d)])
  12. e = replace(e, e == ".." | e == "_", NA)
  13. mode(e) = "numeric"
  14. colnames(e) = as.vector(d[1, 2:ncol(d)])
  15. rownames(e) = as.vector(d[2:nrow(d), 1])

  16. e = e[, colnames(e) %in% rownames(e)]
  17. e = e[rownames(e) %in% colnames(e), ]
复制代码

矩阵e就是你需要的东西(它不是数据框了,它是数值型矩阵),e的尺寸如下:

> dim(e)
[1] 222 222

行与列的数目相同。


已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
cherishlife123 + 5 + 2 + 2 + 2 精彩帖子

总评分: 论坛币 + 5  学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

13
cherishlife123 学生认证  发表于 2014-11-13 18:57:37
meishanjia1900 发表于 2014-11-13 18:41
我不知道你要处理多少张表格,如果仅处理格式类似的表格,可以用以下方法——应你的要求,改用R实现

( ...
that's exactly what i want ! thanks very very much !

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

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