从另一个变量分配值?
问题描述:
我有一个数据帧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来做这个,所以我认为可能有这个功能。任何帮助真的很感激。
答
我假设你的空行会在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
对不起NA值,我忘了..是我在这里的第一篇文章.. – Xiaoxin