簡體   English   中英

將兩列合並到 R 中的值范圍列

[英]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.

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