作者thephone (phone)
看板R_Language
标题[问题] data.frame资料处理
时间Sat Sep 12 17:46:17 2015
[问题叙述]:
想把A资料中 >0 的栏位留下并合并
转成另一张table, 空值补0
简化後示意范例如下
No A B C D E F G
1 1 3 0 0 4 2 1
2 1 0 0 0 2 0 3
3 0 1 0 3 0 0 0
4 1 3 2 1 0 0 0
5 0 6 0 0 0 0 0
6 0 0 0 0 2 2 1
转成另一个data.frame
No a b c d e f g
1 1 3 4 2 1 0 0
2 1 2 3 0 0 0 0
3 1 3 0 0 0 0 0
4 1 3 2 1 0 0 0
5 6 0 0 0 0 0 0
6 2 2 1 0 0 0 0
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 175.180.110.128
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1442051179.A.F73.html
2F:→ thephone: 谢谢c大 先研究看看 09/12 18:03
3F:→ celestialgod: 想了一下 我觉得最快的方法还是直接抓... 09/12 18:10
4F:→ celestialgod: 这篇不适合那篇的方法 09/12 18:10
6F:→ celestialgod: 这样因为是row by row比较慢 09/12 18:21
8F:→ celestialgod: 用字串处理比较快 09/12 18:34
9F:→ thephone: 学到了 谢谢c大 09/12 18:52
谢谢解答
想进一步请问
在一个data.frame中
No1消费者 有A B C D四种消费时间点
A1代表No1 在第一次消费时点的消费金额
A2 A3 A4 A5代表No1第一次消费时点的其他状态(停留时间、点击商品数量..等)
B1 代表No1 在第二次消费时点的消费金额
B2 B3 B4 B5代表No2第二次消费时点的其他状态
欲拿掉消费金额<5的群组
(即判断每个群组的第一位是否<5,若<5,则将其消费伴随的状态也移除)
剩余的往左靠齐
No A1 A2 A3 A4 A5 | B1 B2 B3 B4 B5 | C1 C2 C3 C4 C5 | D1 D2 D3 D4 D5
1 5 6 3 2 1 | 10 11 12 13 14 | 1 1 2 3 4 | 5 5 5 5 9
2 1 2 3 4 5 | 1 1 1 1 1 | 5 8 7 6 5 | 5 3 2 1 0
第一位消费者的A1 B1 C1 >=5 则留下ABC三个群组
第二位消费者的C1 D1 >=5 则留下CD 两个群组
靠右平移 成为以下table
| | |
No A1 A2 A3 A4 A5 | B1 B2 B3 B4 B5 | C1 C2 C3 C4 C5 | D1 D2 D3 D4 D5
1 5 6 3 2 1 | 10 11 12 13 14 | 5 5 5 5 9 |
2 5 8 7 6 5 | 5 3 2 1 0 | |
我是使用for回圈一行一行扫来完成的
想请问当资料量较大的时候[500000*20000]
有其他建议使用的方法吗?
※ 编辑: thephone (122.147.21.174), 09/15/2015 00:19:57
11F:推 celestialgod: 看不太懂 可以麻烦你再详细一点说明吗? 09/15 08:10
12F:→ celestialgod: 那为什麽转好的表,第二列还有<5的 09/15 10:05
13F:→ celestialgod: 而且前面少了一个5... 09/15 10:06
15F:→ celestialgod: 我先照你的逻辑写给你,你先试试看 09/15 10:12
16F:→ celestialgod: 反正就是把<5的都变成0 就回到你原本的问题了 09/15 10:13
之前题意表达不清楚 非常感谢C大热心协助
※ 编辑: thephone (122.147.21.174), 09/15/2015 20:59:54
17F:→ celestialgod: 这个完全不一样了qq 09/15 21:10
18F:→ celestialgod: 我想想,再直接回文好了... 09/15 21:11
19F:→ thephone: many thanks :) 09/15 21:17