我有一个像这样的数据帧:
>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做这个,我想可能有一个功能。任何帮助都非常感谢。
答案 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