如何将值从一个表复制到另一个表

时间:2018-08-01 18:34:03

标签: r

我有两个已分组在一起的数据帧(在SQL中为rbind或Union)。由于现在用户看到的是两行而不是一行,因此可以更好地表示数据。具体而言,用户希望在一行而不是两行中查看酒店价格以及其他酒店信息(因为必须创建rbind-dummy列以匹配列数,所以才能看到两行)。下面是要实现的示例(请注意,两个数据框中的属性都不匹配):

df1 <- data.frame(Property = paste0("Property", "_", letters[1:30]),Dates = seq.Date(as.Date("2018-08-01"), as.Date("2018-08-10"), "d"), RateAmount = abs(rnorm(10) * 200),
                      Occupancy = NA)

df2 <- data.frame(Property = paste0("Property", "_", letters[1:10]),Dates = seq.Date(as.Date("2018-08-01"), as.Date("2018-08-10"), "d"), RateAmount = NA, 
                      Occupancy = rnorm(rnorm(10) * 200, mean = 85))

rbind(df1, df2)

第一个表的整个目的是收集酒店房价(RateAmounts),而第二个表(最后10行)具有除RateAmounts之外的所有必需内容。我想将RateAmount信息(非NA)传输到df2,并从本质上摆脱df1(以每行“属性”而不是两行结束)。我尝试了不同的联接(在日期上使用dplyr)无济于事。预先谢谢你

1 个答案:

答案 0 :(得分:0)

您正在尝试进行等同于联接的操作。 R的merge可以很好地做到这一点。

首先要进行预处理,以去除数据框中的NA列:

df1_new <- df1[,-4]
df2_new <- df2[,-3]

下一次合并:

merge(df1_new, df2_new)

Merge具有用于控制要合并的列的参数以及在不匹配的情况下要保留的数据行。

或者一行:merge(df1[,-4],df2[,-3])

这仅保留匹配的值:

         Property      Dates  RateAmount Occupancy
1  Property_a 2018-08-01  77.0288921  84.97796
2  Property_b 2018-08-02 234.1155289  84.67847
3  Property_c 2018-08-03 347.3747234  86.52871
4  Property_d 2018-08-04   0.7615909  85.14532
5  Property_e 2018-08-05  71.6080894  83.76476
6  Property_f 2018-08-06 171.5747186  86.05425
7  Property_g 2018-08-07  67.7377617  83.22948
8  Property_h 2018-08-08  23.6833664  86.16361
9  Property_i 2018-08-09 468.6021860  82.85337
10 Property_j 2018-08-10 250.3918442  85.03492

如果要保留所有值,则可以设置all = TRUE

merge(df1[,-4],df2[,-3],all=TRUE)

      Property      Dates  RateAmount Occupancy
1   Property_a 2018-08-01  77.0288921  84.97796
2   Property_b 2018-08-02 234.1155289  84.67847
3   Property_c 2018-08-03 347.3747234  86.52871
4   Property_d 2018-08-04   0.7615909  85.14532
5   Property_e 2018-08-05  71.6080894  83.76476
6   Property_f 2018-08-06 171.5747186  86.05425
7   Property_g 2018-08-07  67.7377617  83.22948
8   Property_h 2018-08-08  23.6833664  86.16361
9   Property_i 2018-08-09 468.6021860  82.85337
10  Property_j 2018-08-10 250.3918442  85.03492
11  Property_k 2018-08-01  77.0288921        NA
12  Property_l 2018-08-02 234.1155289        NA
13  Property_m 2018-08-03 347.3747234        NA
14  Property_n 2018-08-04   0.7615909        NA
15 Property_NA 2018-08-07  67.7377617        NA
16 Property_NA 2018-08-08  23.6833664        NA
17 Property_NA 2018-08-09 468.6021860        NA
18 Property_NA 2018-08-10 250.3918442        NA
19  Property_o 2018-08-05  71.6080894        NA
20  Property_p 2018-08-06 171.5747186        NA
21  Property_q 2018-08-07  67.7377617        NA
22  Property_r 2018-08-08  23.6833664        NA
23  Property_s 2018-08-09 468.6021860        NA
24  Property_t 2018-08-10 250.3918442        NA
25  Property_u 2018-08-01  77.0288921        NA
26  Property_v 2018-08-02 234.1155289        NA
27  Property_w 2018-08-03 347.3747234        NA
28  Property_x 2018-08-04   0.7615909        NA
29  Property_y 2018-08-05  71.6080894        NA
30  Property_z 2018-08-06 171.5747186        NA