我们说我有一个带矢量的数据框:
column3
1
3
5
5
4
5
10
5
现在我想创建一个全新的矢量,类似于:
如果列3中的值< 3,然后新向量中的值是&#34;小&#34;。如果column3&gt; 3和&lt; 5中的值,那么new vector中的值为&#34; Medium&#34;。
我尝试嵌套ifelse并且它没有创建新的向量,它只测试了一个值。例如:
newcolumn <- ifelse(as.numeric(data$column3) < 3,"Small", ifelse(as.numeric(data$column3) > 3 && as.numeric(data$column3) <5, "Medium"))
答案 0 :(得分:0)
library(dplyr)
data <- data.frame(column3=c(1,3,5,5,4,5,10,5))
newcolumn <- case_when(data$column3 < 3 ~ "Small", data$column3 < 5 ~ "Medium", TRUE ~ "Big")
[1] "Small" "Medium" "Big" "Big" "Medium" "Big" "Big" "Big"
以下是使用dplyr case_when
的示例。当值大于5时,结果是什么?
使用嵌套if else:
newcolumn <- ifelse(as.numeric(data$column3) < 3,"Small", ifelse(as.numeric(data$column3) <5, "Medium", "Big"))
答案 1 :(得分:0)
更明确的方法是使用base::cut
。
典型用途是:
temp <- c(1L, 3L, 5L, 5L, 4L, 5L, 10L, 5L)
# four cutpoints define three buckets
cut(temp, c(-Inf, 3, 5, Inf))
[1] (-Inf,3] (-Inf,3] (3,5] (3,5] (3,5] (3,5] (5, Inf] (3,5] Levels: (-Inf,3] (3,5] (5, Inf]
返回的向量是一个因素,可能很有用。进一步的改进是使其成为有序因子,并重命名标签:
cut(temp, c(-Inf, 3, 5, Inf), labels = c("Small", "Med", "Large"), ordered_result = T)
[1] Small Small Med Med Med Med Large Med Levels: Small < Med < Large
答案 2 :(得分:0)
如果column3&lt; = 3?
,你的意思是小吗?column3 <- c(1,3,5,5,4,5,10,5)
newcolumn <- rep(NA, length(column3))
newcolumn[column3<=3] <- "Small"
newcolumn[3<column3 & column3<=5] <- "Medium"
newcolumn[5<column3] <- "Large"
> newcolumn
[1] "Small" "Small" "Medium" "Medium" "Medium"
[6] "Medium" "Large" "Medium"