R_Language 板


LINE

※ 引述《PILIPALAPON (pilipalapon)》之铭言: : [问题类型]: : 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来) : [软体熟悉度]: : 新手(没写过程式,R 是我的第一次) : 懂一些简单的指令 : [问题叙述]: : 现在有一个资料档 : ID age sex num : 1 30 1 4 : 1 20 1 4 : 1 21 2 4 : 1 32 2 4 : 1 48 2 4 : 2 23 1 2 : 2 46 1 2 : 2 21 1 2 : 3 23 2 2 : 3 71 2 2 : 3 32 1 2 : 4 56 2 1 : 4 12 2 1 : 我要同ID的依照num变数做选取,例如ID=1,num=4,那我要取ID=1的第四列观测值。ID=2 : ,num=2,那我要取ID=2的第二列观测值,以次类推... : 预期结果如下 : ID age sex num : 1 32 2 4 : 2 46 1 2 : 3 71 2 2 : 4 56 2 1 : library(plyr) library(dplyr) library(magrittr) # data generation set.seed(100) numID = 5 N = 20 dat = data.frame(ID = sample(1:numID, N, TRUE), age = sample(10:50, N, TRUE), sex = sample(1:2, N, TRUE)) %>% group_by(ID) %>% mutate(num = sample(1:length(age), 1)) %>% arrange(ID, sex, age) # ID age sex num # 1 1 21 1 1 # 2 1 40 2 1 # 3 2 17 1 6 # 4 2 24 1 6 # 5 2 31 1 6 # 6 2 35 1 6 # 7 2 49 1 6 # 8 2 39 2 6 # 9 2 46 2 6 # 10 2 50 2 6 # 11 3 17 1 4 # 12 3 32 1 4 # 13 3 27 2 4 # 14 3 32 2 4 # 15 4 15 1 3 # 16 4 30 1 3 # 17 4 46 1 3 # 18 4 38 2 3 # 19 5 48 1 1 # 20 5 41 2 1 # dplyr解法: dat %>% group_by(ID) %>% summarise_each(funs(.[unique(num)])) # ID age sex num # 1 1 21 1 1 # 2 2 39 2 6 # 3 3 32 2 4 # 4 4 46 1 3 # 5 5 48 1 1 # 一般解法: split(dat, dat$ID) %>% lapply(function(subdf) subdf[unique(subdf$num),]) %>% do.call(rbind, .) # ID age sex num # 1 1 21 1 1 # 2 2 39 2 6 # 3 3 32 2 4 # 4 4 46 1 3 # 5 5 48 1 1 上面其实跟以下相等: do.call(rbind, lapply(split(dat, dat$ID), function(subdf) subdf[unique(subdf$num),]) 新手的话,我再补一个for loop解法: # for loop numID = length(unique(dat$ID)) outDF = data.frame(matrix(NA, numID, ncol(dat))) names(outDF) = names(dat) for (i in 1:numID) { rowNum = unique(dat[dat$ID == i, ]$num) outDF[i,] = dat[dat$ID == i, ][rowNum, ] } outDF # ID age sex num # 1 1 21 1 1 # 2 2 39 2 6 # 3 3 32 2 4 # 4 4 46 1 3 # 5 5 48 1 1 -- R资料整理套件系列文: magrittr #1LhSWhpH (R_Language) http://tinyurl.com/1LhSWhpH data.table #1LhW7Tvj (R_Language) http://tinyurl.com/1LhW7Tvj dplyr(上) #1LhpJCfB (R_Language) http://tinyurl.com/1LhpJCfB dplyr(下) #1Lhw8b-s (R_Language) tidyr #1Liqls1R (R_Language) http://tinyurl.com/1Liqls1R --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.109.74.87
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1451032656.A.311.html
1F:推 locka: 推c大! 12/26 00:17
2F:推 yu8861213: 推C大 12/27 21:38
3F:推 Wush978: push 12/27 23:55
4F:推 cywhale: dplyr解法漂亮~~ 12/29 15:07
5F:→ andrew43: c大,我写在 #1LaqCq5O 的爬文器显示你已经是水神等级了 12/29 17:02
什麽是水神 = =? ※ 编辑: celestialgod (140.109.74.87), 12/29/2015 17:11:59







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP