作者celestialgod (攸蓝)
看板R_Language
标题Re: [问题] 资料堆叠
时间Thu Aug 6 22:23:15 2015
※ 引述《SFMAndroid (安卓发送)》之铭言:
: [问题类型]:
: 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
: [软体熟悉度]:
: 入门(写过其他程式,只是对语法不熟悉)
: [问题叙述]:
: 最近在处理一笔资料 大概长这样:
: user web code
: Shelly yam A1
: Bruce finance A2
: Shelly yam A1
: Kate finance A2
: Bruce yam A1
: Bruce google A3
: 希望能够用堆叠(应该是堆叠吧)的方法让资料变成这样:
: user web code1 code2
: Shelly yam A1 A1
: Bruce finance A2
: Bruce yam A1
: Bruce google A3
: Kate finance A2
其实跟
#1Lmlfyuv (R_Language)问题一模一样
程式我就直接搬过来了...
library(data.table) # 只用到fread
library(dplyr) # 用到group_by, mutate, %>%
library(tidyr) # 用到spread (可以用reshape2的dcast代替)
DT = fread("user,web,code
Shelly,yam,A1
Bruce,finance,A2
Shelly,yam,A1
Kate,finance,A2
Bruce,yam,A1
Bruce,google,A3")
DT %>% group_by(user, web) %>%
mutate(code_name = paste0("code_", 1:n())) %>%
spread(code_name, code, fill = "")
# user web code_1 code_2
# 1 Bruce finance A2
# 2 Bruce google A3
# 3 Bruce yam A1
# 4 Kate finance A2
# 5 Shelly yam A1 A1
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.163.8.105
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1438870998.A.A5B.html
1F:推 SFMAndroid: 刚试了一下 他出现Error in eval(expr, envir, enclos08/07 09:05
2F:→ SFMAndroid: ) : object 'web' not found的讯息@@08/07 09:06
直接用我的程式跑的?还是有更换成你的资料
3F:→ SFMAndroid: 恩恩08/07 09:08
4F:→ SFMAndroid: 直接用版大fread那个08/07 09:09
晚点测试再给你回覆
5F:→ SFMAndroid: 我用web另外给一个vector之後 mutate可以跑08/07 09:11
6F:→ SFMAndroid: 出来变成原资料多一栏code_name 里面code_1 code_208/07 09:11
可能是colname问题,多一栏是正常结果
7F:→ SFMAndroid: 好的 谢谢~08/07 09:11
8F:→ SFMAndroid: 但spread那出现 Error in dim(ordered) <- c(attr(row08/07 09:12
9F:→ SFMAndroid: _id, "n"), attr(col_id, "n")) : dims[ product 10]08/07 09:12
10F:→ SFMAndroid: do not match the length of object [0]08/07 09:13
这个可能是code_name的内容
11F:→ SFMAndroid: 版大你太神啦!!! 加上colname後就ok了!!!08/07 09:14
12F:→ SFMAndroid: 五体投地08/07 09:15
我只是纸上谈兵,刚好猜对XD
我测试之後都没有问题,可能是dplyr版本问题
我的是0.4.1版本,可能再麻烦用seesionInfo()确认一下版本
13F:推 SFMAndroid: 我的是0.4.2 08/07 15:43
14F:→ SFMAndroid: 再请问版大 若今天结果变成Bruce finance A2 08/07 15:45
15F:→ SFMAndroid: Bruce finance A1 08/07 15:45
16F:→ SFMAndroid: 要如何把相同的web合起来 变成Bruce finance A2 A1呢 08/07 15:46
17F:→ SFMAndroid: 抱歉没对好@@ A2跟A1分别在path_1和path_2 08/07 15:46
18F:→ SFMAndroid: 打错...code_1和code_2 08/07 15:47
19F:→ SFMAndroid: 试过dcast.data.table和summarise 但是用不出来ˊ ˋ 08/07 15:50
20F:→ SFMAndroid: 啊试出来了 抱歉抱歉 08/07 15:53
试出来就好XD
※ 编辑: celestialgod (1.163.8.105), 08/07/2015 16:41:58