【发布时间】:2017-11-18 00:41:20
【问题描述】:
我现在在网上搜索了几天,但找不到解决我(可能很容易解决)问题的方法。
我有巨大的数据框,其中包含 4 个变量和超过一百万个观察值。现在我想在满足特定条件后选择 100 行,同时选择所有行和 1000 行,并用 NA 填充其余行。我用 for 循环和 if/ifelse 尝试了它,但到目前为止它不起作用。我认为这不应该是一件大事,但目前我只是不明白它的窍门。
我使用以下方法创建数据:
foo<-data.frame(t = 1:15, a = sample(1:15), b = c(1,1,1,1,1,4,4,4,4,1,1,1,1,1,1), c = sample(1:15))
我的数据如下所示:
ID t a b c
1 1 4 1 7
2 2 7 1 10
3 3 10 1 6
4 4 2 1 4
5 5 13 1 9
6 6 15 4 3
7 7 8 4 15
8 8 3 4 1
9 9 9 4 2
10 10 14 1 8
11 11 5 1 11
12 12 11 1 13
13 13 12 1 5
14 14 6 1 14
15 15 1 1 12
我想要的是选择a 的值(在此示例中)之前的 2 行、所有行以及之后的 3 行 b 的值 >1 并用 NA 填充其余部分。 [因为这只是一个例子,我猜你可以想象在这 15 行之后,还有更多的行,b 的值从 1 变为 4 几次(我没有发布它,所以我不会发送垃圾邮件问题有不必要的数据)。]
所以我想得到类似的东西:
ID t a b c d
1 1 4 1 7 NA
2 2 7 1 10 NA
3 3 10 1 6 NA
4 4 2 1 4 2
5 5 13 1 9 13
6 6 15 4 3 15
7 7 8 4 15 8
8 8 3 4 1 3
9 9 9 4 2 9
10 10 14 1 8 14
11 11 5 1 11 5
12 12 11 1 13 11
13 13 12 1 5 NA
14 14 6 1 14 NA
15 15 1 1 12 NA
感谢您的帮助。
谢谢。
最好的问候, 克里斯
【问题讨论】:
-
我不明白这个问题。大概
d列基于您的“条件”,但d列与a列相同,除了它的第一个和最后一个条目,不是吗?b在这里如何发挥作用?你能澄清一下你具体例子的情况吗? -
很抱歉,这是我的第一个问题。我尽量减少示例中的数据,所以恐怕看起来不太合理。我的数据来自实验,其中
b是一个打开 (4) 和关闭 (1) 的 LED,我想在 LED 开启之前计算a的 10 个值的滚动平均值(100 个值),当它打开时,LED 关闭后有 1000 个值。当有 100 万个观测值时,它看起来会有所不同。 -
如果@missuse 的回答不能解决您的问题,您能否举一个具有代表性的最小示例,在其中说明您的测试用例的条件和预期的结果。我想这将有助于向 SO 社区澄清您的问题。
-
我稍微编辑了这个问题。