[英]Merge two columns to a value range column in R
我有一個看起來像這樣的 data.frame。
dat1=data.frame(begin=c(1,100,50,1000), end=c(100,200,400,2000), functions=c("A","B","C","D"))
begin end functions
1 100 A
100 200 B
50 400 C
1000 2000 D
我想將此數據框轉換為值范圍 data.frame 以便能夠映射另一個單個數據點 data.frame。
range functions
1:100 A
100:200 B
50:400 C
1000:2000 D
這是我想在范圍內映射的單點 data.frame。
dat2=data.frame(position=c(20,80,200, 1200, 1500))
position
20
80
200
1200
1500
我想生成一個看起來像這樣的 data.frame。 不完全一樣,但至少整合了每個職位的功能信息。
position function1 fucntion2
20 A
80 A C
200 B C
1200 D
1500 D
感謝您的時間。 任何幫助和方向表示贊賞
這是否可以為您提供所需的信息? 然后,您可以pivot_wider()
或將其調整為您想要的格式。
library(dplyr)
library(tidyr)
dat2 %>%
crossing(dat1) %>%
filter(position >= begin & position <= end)
# A tibble: 7 x 4
position begin end functions
<dbl> <dbl> <dbl> <chr>
1 20 1 100 A
2 80 1 100 A
3 80 50 400 C
4 200 50 400 C
5 200 100 200 B
6 1200 1000 2000 D
7 1500 1000 2000 D
這是否有效:
> library(purrr)
> library(dplyr)
> dat1 %>% mutate(range = map2(begin, end, `:`)) %>% unnest(range) %>% right_join(dat2, by = c('range' = 'position'), keep = T) %>% select(-range)
# A tibble: 7 x 4
begin end functions position
<dbl> <dbl> <chr> <dbl>
1 1 100 A 20
2 1 100 A 80
3 100 200 B 200
4 50 400 C 80
5 50 400 C 200
6 1000 2000 D 1200
7 1000 2000 D 1500
>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.