我有两个已分组在一起的数据帧(在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)无济于事。预先谢谢你
答案 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