我有两个数据帧。我需要将一列的值添加到另一个数据帧中的每一行,其中特定列的值满足第一个数据帧的条件。
DF1:
a b n
x 23 3
s 34 4
v 15 2
g 05 1
k 69 7
df2:
df1
期望的输出:
df2
在我的数据集中,间隔很大,并且df1中的值不太可能恰好位于df2间隔的边界上。
基本上对于df1$b
中的每一行,我需要在df2$y
中指定与其适合的范围相对应的数字。因此,如果df2$z
介于df2$x
和username
之间,则将输出$ n的值指定为dataSnapshot
的对应值。这是一个非常罗嗦的问题,所以请问我是否需要澄清。
答案 0 :(得分:1)
df1 = read.table(text = "
a b
x 23
s 34
v 15
g 05
k 69
", header=T, stringsAsFactors=F)
df2 = read.table(text = "
x y z
1 0 10
2 10 20
3 20 30
4 30 40
5 40 50
6 50 60
7 60 70
", header=T, stringsAsFactors=F)
# function
f = function(x) min(which(x >= df2$y & x <= df2$z))
f = Vectorize(f)
# apply function
df1$n = f(df1$b)
# check updated dataset
df1
# a b n
# 1 x 23 3
# 2 s 34 4
# 3 v 15 2
# 4 g 5 1
# 5 k 69 7
答案 1 :(得分:0)
您可以尝试:
library(tidyverse)
df1 %>%
rowwise() %>%
mutate(n=df2[ b > df2$y & b <= df2$z,1]) %>%
ungroup()
# A tibble: 5 x 3
a b n
<chr> <int> <int>
1 x 23 3
2 s 34 4
3 v 15 2
4 g 5 1
5 k 69 7
如前所述,您必须根据需要将<
或>
更改为<=
或>=
。