2017-08-01 166 views
-1

我有一個數據幀DF這樣的:從另一個變量分配值?

>VAR1   VAR2 
>38   230 
>78   300 
>125   600 
>173   
>221 
>271 
>323 
>375 
>429 
>484 
>547 
>610 

,我想分配中無功2的值在瓦爾1的值之間,從而在VAR2的值比在VAR1的值小(但大於上述值)。因此,DF有看起來某事像這樣:

>VAR1   VAR2 
>38   
>78   
>125   
>173   
>221 
>271   230 
>323   300 
>375 
>429 
>484 
>547   
>610   600 

我已經試過「的」功能全,但後來我不得不手動分配值。這當然是一種選擇,但是由於我必須用幾個df來做這個,所以我認爲可能有這個功能。任何幫助真的很感激。

+0

對不起NA值,我忘了..是我在這裏的第一篇文章.. – Xiaoxin

回答

1

我假設你的空行會在R.

library(dplyr) 

# example of dataset 
dt = data.frame(Var1 = c(173,221,271,323,375,429,610), 
       Var2 = c(230,300,600,NA,NA,NA,NA)) 

# function that gets the minimum value above a given value x 
f = function(x) { min(dt$Var1[dt$Var1 > x]) } 
f = Vectorize(f) 

# get pairs of Var1 and Var2 values 
dt_pairs = data.frame(Var2 = dt$Var2) %>% # keep only Var2 column as a dataframe 
    filter(!is.na(Var2)) %>%     # filter out NAs 
    mutate(Var1 = f(Var2))     # for each Var2 value get the corresponding value from Var1 

# see how the pairs look 
dt_pairs 

# Var2 Var1 
# 1 230 271 
# 2 300 323 
# 3 600 610 


dt %>% 
    select(Var1) %>%       # select only Var1 
    left_join(dt_pairs, by="Var1")   # join the Var2 values 

# Var1 Var2 
# 1 173 NA 
# 2 221 NA 
# 3 271 230 
# 4 323 300 
# 5 375 NA 
# 6 429 NA 
# 7 610 600 
+0

哇,我的數據出色it.worked。非常感謝! – Xiaoxin