データフレームがある場合
set.seed(12345)
df=data.frame(a=rnorm(5),b=rnorm(5))
たとえば、行を追加できます
df[6,] =c(5,6)
data.tableで同等のことを行うと
library(data.table)
dt=data.table(df)
dt[6,]=c(5,6)
エラーで失敗します。行をdata.tableに挿入する正しい方法は何ですか?
データフレームがある場合
set.seed(12345)
df=data.frame(a=rnorm(5),b=rnorm(5))
たとえば、行を追加できます
df[6,] =c(5,6)
data.tableで同等のことを行うと
library(data.table)
dt=data.table(df)
dt[6,]=c(5,6)
エラーで失敗します。行をdata.tableに挿入する正しい方法は何ですか?
@Franksの回答を拡張するには、特定のケースで行を追加する場合、それは次のとおりです。
set.seed(12345)
dt1 <- data.table(a=rnorm(5), b=rnorm(5))
以下は同等です。最初の方が読みやすいですが、2番目の方が速いと思います:
microbenchmark(
rbind(dt1, list(5, 6)),
rbindlist(list(dt1, list(5, 6)))
)
ご覧のとおり:
expr min lq median uq max
rbind(dt1, list(5, 6)) 160.516 166.058 175.089 185.1470 457.735
rbindlist(list(dt1, list(5, 6))) 130.137 134.037 140.605 149.6365 184.326
行を別の場所に挿入したい場合は、次のようにしますが、きれいではありません。
rbindlist(list(dt1[1:3, ], list(5, 6), dt1[4:5, ]))
あるいは
rbindlist(list(dt1[1:3, ], as.list(c(5, 6)), dt1[4:5, ]))
与える:
a b
1: 0.5855288 -1.8179560
2: 0.7094660 0.6300986
3: -0.1093033 -0.2761841
4: 5.0000000 6.0000000
5: -0.4534972 -0.2841597
6: 0.6058875 -0.9193220
行をその場で変更する場合 (これが推奨される方法です)、事前に data.table のサイズを定義する必要があります。
dt1 <- data.table(a=rnorm(6), b=rnorm(6))
set(dt1, i=6L, j="a", value=5) # refer to column by name
set(dt1, i=6L, j=2L, value=6) # refer to column by number
ありがとう@Boxuan、あなたの提案を考慮してこの回答を修正しました。これは少し速くて読みやすいです。