【发布时间】:2021-09-13 20:12:02
【问题描述】:
我的数据包含一组对不同组的观察。每组有不同数量的观察值。我想创建一个变量,用“1”标记观察结果,以进行进一步的手动 QA/QC。标志应该在一个组内有规律地间隔,但两个组之间的间隔可能不同。间距是通过将每个组的长度除以一个常数(本例中为 5)得出的。
数据看起来像这样:
dt<-data.table(places=c(rep("A",10), rep("B",20))) #the data
dt2<-data.table(places=c("A","B"), spacing=c(2,4)) #the spacings by group to apply to the data
然后应用一些代码来生成标记(或序列)
dt$sequence<- ????
看起来像:
places sequence
A 1
A
A 1
A
...
B 1
B
B
B
基本上,我希望根据已为该组确定的理想间距让每个组“计数”,并且每次计数循环时只保留“1”。我只是不确定如何为 data.table 提供间距和组组合。
【问题讨论】:
-
dplyr很简单,但我很好奇您用于确定间距的精确规则。如果列的长度不能被相应的spacing整除,您是要向下舍入到最接近的整数,还是向上舍入到最接近的整数...或其他什么东西?您能否提供一个函数f <- function(col_length, spacing_divisor){...}来精确定义您的意图? -
当然,
f<-function(col_length){floor(col_length/5}dplyr 解决方案会很有趣,但我对 data.table 解决方案真的很感兴趣。 -
谢谢!马上就有答案了!
-
我应该指出,您的示例输出显示
1每 2 行出现一次"A",而不是在开始和中途出现一次......这就是f将提供2并要求将组分成 2 个相等的部分。 -
嗯,我没有看到这个问题。我在想象我的功能被小组应用。我意识到我的解决方案比我做的要容易。见下文。
标签: r data.table