根据两个数据帧之间的条件将值分配给新列

时间:2017-12-14 10:37:53

标签: r

我有两个数据帧。我需要将一列的值添加到另一个数据帧中的每一行,其中特定列的值满足第一个数据帧的条件。

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$xusername之间,则将输出$ n的值指定为dataSnapshot的对应值。这是一个非常罗嗦的问题,所以请问我是否需要澄清。

2 个答案:

答案 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

如前所述,您必须根据需要将<>更改为<=>=