这个问题类似于Expand Data Frame,但我的问题更复杂。我有一个数据集,我将其转换为数据表" dt"如上所述的例子。
X = Y, Y = 1
X = 1,
Y = 2
X = 1,
Y = 3
我想扩展数据集,以便每个高度都有自己的行。 count列确定的行数。看起来应该是这样的:
> dt
site year plot ht count
1: 0001 00 1 0.0833 3
2: 0001 00 2 0.2 5
3: 0001 02 2 0.75 1
4: 0001 02 2 0.0833 3
5: 0002 00 1 0.0833 1
----
#Truncated (it's got over 200,000 rows)
> str(dt)
Classes ‘data.table’ and 'data.frame': 220116 obs. of 5 variables:
$ site : chr "0001" "0001" "0001" "0001" ...
$ year : chr "00" "00" "02" "02" ...
$ plot : int 1 2 2 2 1 1 2 2 3 ...
$ ht : num 0.0833 0.0833 0.75 0.0833 0.0833 5.5 0.0833 0.0833 0.0833
0.0833 ...
$ count: num 3 15 1 3 1 3 1 1 1 2 ...
- attr(*, ".internal.selfref")=<externalptr>
>
我尝试使用与Expand Data Frame示例中的功能类似的内容:
site year plot ht
0001 00 1 0.0833
0001 00 1 0.0833
0001 00 1 0.0833
0001 00 2 0.2
0001 00 2 0.2
0001 00 2 0.2
0001 00 2 0.2
0001 00 2 0.2
0001 02 2 0.75
0001 02 2 0.0833
----
我收到了这个错误:
eval(expr,envir,enclos)中的错误:object&#39; site&#39;找不到
挑战是:
使用&#39; ht&#39;扩展行保留正确的网站,年份和情节#
旧大学计算机
这是我毕业论文的一小部分。非常感谢任何帮助!
-Lake Graboski
答案 0 :(得分:1)
使用data.table
有两种方法可以做到这一点。评论的替代方法是使用.I
(行数的向量 - 1:nrow(df)
)和.SD
,这是data.table本身:
dt[, .SD[rep(.I, count)]]
# site year plot ht count
# 1: 1 0 1 0.0833 3
# 2: 1 0 1 0.0833 3
# 3: 1 0 1 0.0833 3
# 4: 1 0 2 0.2000 5
# 5: 1 0 2 0.2000 5
# 6: 1 0 2 0.2000 5
# 7: 1 0 2 0.2000 5
# 8: 1 0 2 0.2000 5
# 9: 1 2 2 0.7500 1
#10: 1 2 2 0.0833 3
#11: 1 2 2 0.0833 3
#12: 1 2 2 0.0833 3
#13: 2 0 1 0.0833 1