如何使用依赖于另一个向量中的值的值创建向量?

时间:2018-02-28 19:04:40

标签: r

我们说我有一个带矢量的数据框:

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"))

3 个答案:

答案 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"