我有一个数据框,如:
a b
1 3
2 2
3 0
4 1
5 0
这里我有5行,想要分割数据,以便我有10行,例如:
a b
1 1.5
2 1.5
3 1
4 1
5 0
6 0
7 0.5
8 0.5
9 0
10 0
我有大约450个这样的数据集,它们的长度各不相同,并且所有长度都不同,例如,第一个是107行,但我想分割数据,使其变为250行长,第二行是275行,我想将它拆分为333行。
有没有人知道允许我在R中执行此操作的公式?
答案 0 :(得分:2)
data.frame(a=seq(nrow(df)*2), b=rep(df$b/2,each=2))
a b
1 1 1.5
2 2 1.5
3 3 1.0
4 4 1.0
5 5 0.0
6 6 0.0
7 7 0.5
8 8 0.5
9 9 0.0
10 10 0.0
答案 1 :(得分:0)
您可以这样做的一种方法是在原始数据框中创建一个新变量:
df $ b2 = df $ b / 2
然后创建一个新的数据框并附加旧的数据框:
df2< - df
df2< - rbind(df2,df)
然后你可以摆脱原来的b2变量,如果你喜欢
df2 $ b< - NULL
答案 2 :(得分:0)
因此,我会猜测你需要做什么才能进行不规则的调整,但要保持原始解决方案的特性。
如果我们将元素视为步进函数中的增量,那么我们可以使用approx
函数从cumsum
进行线性插值,然后使用diff
来恢复原件
代码看起来像
resize.interpolate <- function(data, new.length) {
l <- length(data)
diff(approx(0:l/l, c(0, cumsum(data)), 0:new.length/new.length)$y)
}
一些例子
> df <- data.frame(a=1:5, b=c(3,2,0,1,0))
> resize.interpolate(df$b, 7)
[1] 2.1428571 1.7142857 1.1428571 0.0000000 0.5714286 0.4285714 0.0000000
> resize.interpolate(df$b, 10)
[1] 1.5 1.5 1.0 1.0 0.0 0.0 0.5 0.5 0.0 0.0
要将它们组合在一起,你可以
df2 <- data.frame(a=1:7, b=resize.interpolate(df$b, 7))