【发布时间】:2019-09-12 09:57:41
【问题描述】:
假设我有这个数据集:
df1 = data.frame(groupID = c(rep("a", 6), rep("b", 6), rep("c", 6)),
testid = c(111, 222, 333, 444, 555, 666, 777, 888, 999, 1010, 1111, 1212, 1313, 1414, 1515, 1616, 1717, 1818))
df1
groupID testid
1 a 111
2 a 222
3 a 333
4 a 444
5 a 555
6 a 666
7 b 777
8 b 888
9 b 999
10 b 1010
11 b 1111
12 b 1212
13 c 1313
14 c 1414
15 c 1515
16 c 1616
17 c 1717
18 c 1818
我有第二个数据集:
df2 = data.frame(groupID = c("a", "a", "a", "a", "b", "b", "b", "c", "c", "c"),
testid = c(222, 333, 555, 666, 777, 999, 1010, 1313, 1616, 1818),
bd = c(1, 1, 2, 2, 0, 1, 1, 1, 1, 2))
df2
groupID testid bd
1 a 222 1
2 a 333 1
3 a 555 2
4 a 666 2
5 b 777 0
6 b 999 1
7 b 1010 1
8 c 1313 1
9 c 1616 1
10 c 1818 2
我想使用第二个数据集中的间隔来填充第一个数据集中的新变量,并按组自动填充在其他任何地方出现两次 bd 和 NAs 的值。
期望的输出:
groupID testid new_bd
1 a 111 NA
2 a 222 1
3 a 333 1
4 a 444 NA
5 a 555 2
6 a 666 2
7 b 777 0
8 b 888 NA
9 b 999 1
10 b 1010 1
11 b 1111 NA
12 b 1212 NA
13 c 1313 1
14 c 1414 1
15 c 1515 1
16 c 1616 1
17 c 1717 NA
18 c 1818 2
理想情况下希望dplyr/tidyr 解决方案,但可以接受任何方法。
类似,但这些填充所有值: R: Filling timeseries values but only within last 12 months
【问题讨论】:
-
您在寻找
merge(df1, df2, all.x = TRUE)吗? -
这不仅仅是因为我想填写,比如在“c”组中,重复 1 直到在
test_id== 1616 找到下一个 1。 -
您确定您的输入和所需的输出匹配吗?你在
df1中有1717,在df2中有1716 -
抱歉,错字,已编辑。
-
@RonakShah 你有一个
purrr/apply解决方案吗?下面的 for 循环有效,但在我的大型数据集上非常慢
标签: r merge dplyr autofill fuzzyjoin