R_Language 板


LINE

※ 引述《hizerg (路过的人)》之铭言: : [问题类型]: : : 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来) : : [软体熟悉度]: : : 入门(写过其他程式,只是对语法不熟悉) : : [问题叙述]: : 请简略描述你所要做的事情,或是这个程式的目的 : 多组数值(甲、乙) : 甲介於1~3间,且乙= M1得到K1 : 甲介於4~6间,且乙= M2得到K2 : 甲介於7~9间,且乙= M3得到K3 : 1.产生资料 : A <- c(1, 3, "M1", "K1") : B <- c(4, 6, "M2", "K2") : C <- c(7, 9, "M3", "K3") : X1 <- c(3, "M1") : X2 <- c(4, "M1") : X3 <- c(8, "M3") : 当X1资料丢进去判断,得到K1 : 当X2资料丢进去判断,得到null : 当X3资料丢进去判断,得到K3 : 这个用回圈写会比较好?(完全没头绪) : 谢谢各位前辈 : : [环境叙述]: : : R version 3.3.3 (2017-03-06) : Windows 7 x64 Service Pack 1 : : [关键字]: : : R语言多重数据判断分类 : 虽然你是新手QQ 如果你连data.frame都不会用,请先去补强R的基本知识... data.frame是R里面处理字串、数字混合型最方便的型别 而data.table提供记忆体面的相同操作,比data.frame更快 尝试先把你的资料用data.table表示 然後直接套用data.table的non-equi join,瞬间就可以得到答案了: library(data.table) judgeDT <- data.table(x_lb = c(1, 4, 7), x_ub = c(3, 6, 9), y_cate = paste0("M", 1:3), output = paste0("K", 1:3)) judgeDT # x_lb x_ub y_cate output # 1: 1 3 M1 K1 # 2: 4 6 M2 K2 # 3: 7 9 M3 K3 inputDT <- unique(data.table(X = sample(1:10, 100, TRUE), Y = sample(paste0("M", 1:3), 100, TRUE))) head(inputDT) # X Y # 1: 3 M2 # 2: 10 M3 # 3: 4 M3 # 4: 3 M1 # 5: 6 M3 # 6: 6 M2 judgeDT[inputDT, .(X, Y, output), on = .(x_lb <= X, x_ub >= X, y_cate == Y)] # X Y output # 1: 3 M2 NA # 2: 10 M3 NA # 3: 4 M3 NA # 4: 3 M1 K1 # 5: 6 M3 NA # 6: 6 M2 K2 如果没办法接受就直接回圈吧: judgeDF <- data.frame(x_lb = c(1, 4, 7), x_ub = c(3, 6, 9), y_cate = paste0("M", 1:3), output = paste0("K", 1:3), stringsAsFactors = FALSE) inputDF <- unique(data.frame(X = sample(1:10, 100, TRUE), Y = sample(paste0("M", 1:3), 100, TRUE), stringsAsFactors = FALSE)) inputDF$output <- rep(NA_character_, nrow(input)) for (i in 1L:nrow(inputDF)) { loc <- which(inputDF[i, 1] >= judgeDF[, 1] & inputDF[i, 1] <= judgeDF[, 2] & inputDF[i, 2] == judgeDF[, 3]) if (length(loc) > 0L) { inputDF$output[i] <- judgeDF[loc, 4] } else { inputDF$output[i] <- NA } } -- R资料整理套件系列文: magrittr #1LhSWhpH (R_Language) https://goo.gl/72l1m9 data.table #1LhW7Tvj (R_Language) https://goo.gl/PZa6Ue dplyr(上.下) #1LhpJCfB,#1Lhw8b-s (R_Language) https://goo.gl/I5xX9b tidyr #1Liqls1R (R_Language) https://goo.gl/i7yzAz pipeR #1NXESRm5 (R_Language) https://goo.gl/zRUISx --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.233.137.157
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1489673944.A.37D.html
1F:推 hizerg: 感谢版主! 认真想一下怎麽写 03/16 22:31
2F:→ hizerg: 共有50组条件 与5000多笔资料要跑 03/16 22:31
如果你条件是上面那样的五十组,只要资料塞进data.frame,剩下简单了... 如果是五十个条件,没有办法像是你的例子那样正规化,那就只能写if-else
3F:推 hizerg: 这真的提供我一个很棒的方向 起码让我知道对的工具 感谢!! 03/16 22:35
你大概就用csv存资料,用read.table读进来就好了XD
4F:推 hizerg: 我打算用csv存资料 在整行整行汇入 再用if-else写写看 03/16 22:41
5F:→ hizerg: 不过data.frame和table也需要好好研究 03/16 22:41
一步步来,先学好data.frame + vectorization的程式逻辑... data.table算是满难的套件 ※ 编辑: celestialgod (36.233.137.157), 03/16/2017 23:37:38







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灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP