从另一个变量中分配值?

时间:2017-08-01 13:16:58

标签: r dataframe

我有一个像这样的数据帧:

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

我想在Var 1的值之间分配Var 2中的值,以便Var2中的值小于Var1中的值(但大于上面的值)。所以df必须看起来像这样:

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

我尝试了“哪个”功能,但后来我必须手动分配值。当然,这是一个选项,但由于我必须用几个df做这个,我想可能有一个功能。任何帮助都非常感谢。

1 个答案:

答案 0 :(得分:1)

我假设您的空行将是R中的NA值。

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
相关问题