這是我正在使用的示例資料框:
numbers <- data.frame(value=c(-5000,1,2,100,200,300,400,500, 1000, 2000, 10000, 12000))
我希望在此資料框中創建一個名為“輸出”的新列,其中包含如下
值: -如果值在 1 到 10000 之間,
則與“值”列中的值相同 -10000 如果“值”列中的值更多比 10000 和
-1 如果列“值”中的值小于 1
新列“輸出”中的期望輸出:1,1,2,100,200,300,400,500, 1000,2000, 10000, 10000。
我真的很想學習如何使用 for 回圈、if、else if 和 else 陳述句來獲取此輸出并嘗試了以下操作:
for (i in 1:nrow (numbers$value)){
if (numbers$value[i] >10000){
numbers$output <- 10000)
} else if (numbers$value[i] < 1){
numbers$output <- 1)
} else {
numbers$output <- numbers$value)
}
}
不幸的是,這給了我一個錯誤,錯誤:“}”中的意外 '}'
感謝您幫助修復此代碼!
uj5u.com熱心網友回復:
我明白你為什么試圖用 for 回圈來解決這個問題(我一直在那里......)。在 R 中,有一種有用的東西叫做矢量化。您可以使用 *apply 系列在輸入向量上應用函式。通過這個,你給函式一個輸入,你會自動得到一個相同長度的輸出。
sapply(numbers$value, function(x){
if (x >10000) return(10000)
else if (x < 1) return(1)
else return(x)
}) -> numbers$output
uj5u.com熱心網友回復:
原代碼有幾個錯誤:未初始化輸出變數、不匹配且不需要“)”、必要時未使用下標等錯誤。請參閱下面更正的代碼。
numbers <- data.frame(value=c(-5000,1,2,100,200,300,400,500, 1000, 2000, 10000, 12000))
numbers$output<-NA
for (i in 1:nrow(numbers)){
if (numbers$value[i] >10000){
numbers$output[i] <- 10000
} else if (numbers$value[i] < 1){
numbers$output[i] <- 1
} else {
numbers$output[i] <- numbers$value[i]
}
}
numbers
這是使用case_whendplyr 包中的函式更直接的解決方案:
numbers <- data.frame(value=c(-5000,1,2,100,200,300,400,500, 1000, 2000, 10000, 12000))
library(dplyr)
numbers$output <-case_when(
numbers$value >10000 ~ 10000,
numbers$value < 1 ~ 1,
TRUE ~ numbers$value. #default case
)
numbers
uj5u.com熱心網友回復:
本著 ifelse-ness 的精神,您也可以使用該ifelse()功能。
numbers$output <- ifelse(numbers$value > 1000, 1000, ifelse(numbers$value < 0, 1, numbers$value))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/373034.html
下一篇:Java布爾“意外的回傳值”
