r ifelse多條件 在 大象中醫 Youtube 的最佳貼文
r ifelse多條件 在 大象中醫 Youtube 的精選貼文
r ifelse多條件 在 3 控制流程| 資料科學與R語言 的推薦與評價
if-else敘述使用在邏輯判斷,若需要依條件改變需要執行的程式碼,就會 ... 就會用到多重邏輯,使用多重邏輯時,會在 if 和 else 間新增邏輯區段else if,程式範例如下:. ... <看更多>
r ifelse多條件 在 Seektocurrenterrorhandler github - Max Total Shop 的推薦與評價
... にかかわらず、各コピーにこの著作権表示が含まれていることを条件とします。 ... 35 Jenkins发布HTML报告不发布html报告; 36 使用年份的子集在R中创建条形图I am ... ... <看更多>
r ifelse多條件 在 [問題] 用R數據條件判斷分類- 精華區R_Language 的推薦與評價
[問題類型]:
程式諮詢(我想用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")
D
E....約有50組的條件須配對
X1 <- c(3, "M1")
X2 <- c(4, "M1")
X3 <- c(8, "M3")
X4
X5...約有5000筆資料要運算
當X1資料丟進去判斷,得到K1
當X2資料丟進去判斷,得到null
當X3資料丟進去判斷,得到K3
...以此類推
這個用迴圈寫會比較好?(完全沒頭緒)
謝謝各位前輩
[環境敘述]:
R version 3.3.3 (2017-03-06)
Windows 7 x64 Service Pack 1
[關鍵字]:
R語言多重數據判斷分類
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.139.118
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1489666077.A.53B.html
※ 編輯: hizerg (1.169.139.118), 03/16/2017 20:09:57
※ 編輯: hizerg (1.169.139.118), 03/16/2017 22:07:53
> -------------------------------------------------------------------------- <
作者: clsmbstu (missing) 看板: R_Language
標題: Re: [問題] 用R數據條件判斷分類
時間: Thu Mar 16 21:13:06 2017
我的想法是用簡單的條件式去判斷就好,不用寫迴圈。
下面只是把你的目的寫成條件式,再加一個保險,避免丟進去的物件不是兩個元素:
####
multiple_judges <- function(x) {
if (length(x) != 2) {stop("The input should have 2 elements.")}
# 如果丟進去的東西不是兩個值,程式會警告並停止執行
else {
if (x[1] >= 1 & x[1] <= 3 & x[2] == "M1") {return("K1")}
# 甲介於1~3間,且乙= M1得到K1
else if (x[1] >= 4 & x[1] <= 6 & x[2] == "M2") {return("K2")}
# 甲介於4~6間,且乙= M2得到K2
else if (x[1] >= 7 & x[1] <= 9 & x[2] == "M3") {return("K3")}
# 甲介於7~9間,且乙= M3得到K3
else {return(NULL)}
}
}
multiple_judges(X1)
multiple_judges(X2)
multiple_judges(X3)
####
應該可以得到你想要的結果~
※ 引述《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(5, "M1")
: X2 <- c(4, "M2")
: 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語言多重數據判斷分類
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.225.139.194
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1489669988.A.D66.html
※ 編輯: clsmbstu (36.225.139.194), 03/16/2017 21:16:27
> -------------------------------------------------------------------------- <
作者: celestialgod (天) 看板: R_Language
標題: Re: [問題] 用R數據條件判斷分類
時間: Thu Mar 16 22:19:01 2017
※ 引述《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://www.ptt.cc/bbs/R_Language/M.1489673944.A.37D.html
如果你條件是上面那樣的五十組,只要資料塞進data.frame,剩下簡單了...
如果是五十個條件,沒有辦法像是你的例子那樣正規化,那就只能寫if-else
你大概就用csv存資料,用read.table讀進來就好了XD
一步步來,先學好data.frame + vectorization的程式邏輯...
data.table算是滿難的套件
※ 編輯: celestialgod (36.233.137.157), 03/16/2017 23:37:38
... <看更多>