簡體   English   中英

將一個向量的值分配給基於 R 中另一個向量的組

[英]assign value from one vector to a group based on another vector in R

我有 2 個向量:

v1 = c(4, 8, 13)
v2 = 1:20

我想根據元素比較將v2中的每個元素分類到特定組。 在此示例中,v2 中的值 1:4 將歸類到 group1,值 5:8 歸類到 group2,值 9:13 歸類到 group3,值 14:20 歸類到 group4。

我想要一個最終的 df

在此處輸入圖像描述

有什么建議么

我們可以使用%in%cumsum來創建索引並paste 'group'

data.frame(ls2 = v2, group = paste0("group", cumsum(v2 %in% (v1 + 1)) + 1))

-輸出

 ls2  group
1    1 group1
2    2 group1
3    3 group1
4    4 group1
5    5 group2
6    6 group2
7    7 group2
8    8 group2
9    9 group3
10  10 group3
11  11 group3
12  12 group3
13  13 group3
14  14 group4
15  15 group4
16  16 group4
17  17 group4
18  18 group4
19  19 group4
20  20 group4

可能有更多通用/優雅的解決方案,但要根據示例重新創建所需的數據集,您可以嘗試:


group <- case_when(v2 <= v1[1] ~ "group1",
                   v2 %in% (v1[1]+1):v1[2] ~"group2",
                   v2 %in% (v1[2]+1):v1[3] ~"group3",
                   v2 > v1[3] ~"group4"
)

cbind(v2, group)
# v2   group   
# [1,] "1"  "group1"
# [2,] "2"  "group1"
# [3,] "3"  "group1"
# [4,] "4"  "group1"
# [5,] "5"  "group2"
# [6,] "6"  "group2"

你可以使用findInterval嗎?

data.frame(
  v2,
  group = paste0("group", findInterval(v2, v1, left.open = T) + 1)
)

Output

   v2  group
1   1 group1
2   2 group1
3   3 group1
4   4 group1
5   5 group2
6   6 group2
7   7 group2
8   8 group2
9   9 group3
10 10 group3
11 11 group3
12 12 group3
13 13 group3
14 14 group4
15 15 group4
16 16 group4
17 17 group4
18 18 group4
19 19 group4
20 20 group4

一個簡單的方法是:

id = seq_len(length(v1) + 1)
n = diff(c(0, v1, length(v2)))

rep(id, n)
#[1] 1 1 1 1 2 2 2 2 3 3 3 3 3 4 4 4 4 4 4 4

另一種可能的解決方案:

v1 = c(4, 8, 13)
v2 = 1:20

data.frame(v2, groups = cut(v2, breaks = c(0,v1,20),
           labels = paste0("group", 1:(1+length(v1)))))

#>    v2 groups
#> 1   1 group1
#> 2   2 group1
#> 3   3 group1
#> 4   4 group1
#> 5   5 group2
#> 6   6 group2
#> 7   7 group2
#> 8   8 group2
#> 9   9 group3
#> 10 10 group3
#> 11 11 group3
#> 12 12 group3
#> 13 13 group3
#> 14 14 group4
#> 15 15 group4
#> 16 16 group4
#> 17 17 group4
#> 18 18 group4
#> 19 19 group4
#> 20 20 group4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM