通过保留#ID列的count列扩展R中的数据集

时间:2018-01-05 16:57:42

标签: r database

这个问题类似于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;找不到

挑战是:

  1. 使用&#39; ht&#39;扩展行保留正确的网站,年份和情节#

  2. 旧大学计算机

  3. 这是我毕业论文的一小部分。非常感谢任何帮助!

    -Lake Graboski

1 个答案:

答案 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