根据上限将新列添加到数据框

时间:2020-09-23 14:31:56

标签: r

我有一个数据集,我想将其中一个num_values从另一个数据框中添加新值。

这里是一个示例,创建一些df1

First.Name <- c("John", "Edgar", "Walt", "Jane")
Second.Name <- c("Doe", "Poe", "Whitman", "Austen")
num_value <- runif(4,0,1.2)
df1 <- data.frame(First.Name, Second.Name, num_value)

具有此输出

 First.Name Second.Name  num_value
1       John         Doe 0.08137931
2      Edgar         Poe 0.30245512
3       Walt     Whitman 0.62542554
4       Jane      Austen 0.40573224

df2定义为

upper_boundary <- seq(0,1.6,0.2)
class_value <- c(1:9)
df2 <- data.frame(upper_boundary, class_value)

并输出为

  upper_boundary class_value
1            0.0           1
2            0.2           2
3            0.4           3
4            0.6           4
5            0.8           5
6            1.0           6
7            1.2           7
8            1.4           8
9            1.6           9

我想做的是在df2的第一个数据帧类值的末尾添加。 输出应类似于

       First.Name Second.Name  num_value     class_value  
    1       John         Doe 0.08137931         2
    2      Edgar         Poe 0.30245512         3
    3       Walt     Whitman 0.62542554         5
    4       Jane      Austen 0.40573224         4

预先感谢

2 个答案:

答案 0 :(得分:0)

cutfindInterval将在这里工作。我将使用第二个

df1$class_value <- df2$class_value[ findInterval(df1$num_value, df2$upper_boundary) ]
df1
#   First.Name Second.Name num_value class_value
# 1       John         Doe 0.1908379           1
# 2      Edgar         Poe 0.5045381           3
# 3       Walt     Whitman 0.1925997           1
# 4       Jane      Austen 0.2674465           2

答案 1 :(得分:0)

像下面一样尝试cut

df1$class_value <- df2$class_value[as.integer(cut(df1$num_value,df2$upper_boundary))+1]