【发布时间】:2016-08-09 23:32:31
【问题描述】:
我最近的几篇文章写得不好,所以这次我会尝试做得更好,更干净。
我正在学习如何使用数据表对象,而我正在努力完成的一项任务是同时按行号和列名更新数据表中的值。使用 data.frames 这会容易得多,我只需执行以下操作:
my_df = as.data.frame(matrix(ncol = 10, nrow = (100)))
names(my_df) = c("P1", "P2", "P3", "P4", "P5", "Q1", "Q2", "Q3", "Q4", "Q5")
head(my_df)
P1 P2 P3 P4 P5 Q1 Q2 Q3 Q4 Q5
1 NA NA NA NA NA NA NA NA NA NA
2 NA NA NA NA NA NA NA NA NA NA
3 NA NA NA NA NA NA NA NA NA NA
4 NA NA NA NA NA NA NA NA NA NA
5 NA NA NA NA NA NA NA NA NA NA
6 NA NA NA NA NA NA NA NA NA NA
replacement = c(1, 2, 3, 4, 5)
my_df[2, names(my_df)[1:5]] = replacement
head(my_df)
P1 P2 P3 P4 P5 Q1 Q2 Q3 Q4 Q5
1 NA NA NA NA NA NA NA NA NA NA
2 1 2 3 4 5 NA NA NA NA NA
3 NA NA NA NA NA NA NA NA NA NA
4 NA NA NA NA NA NA NA NA NA NA
5 NA NA NA NA NA NA NA NA NA NA
6 NA NA NA NA NA NA NA NA NA NA
所以,使用数据框相当容易。但是,我正在努力使用数据表完成同样的任务。对示例数据表使用与上面的数据框相同的结构,我尝试了以下方法:
my_dt = data.table(matrix(ncol = 10, nrow = (100)))
names(my_dt) = c("P1", "P2", "P3", "P4", "P5", "Q1", "Q2", "Q3", "Q4", "Q5")
head(my_dt)
P1 P2 P3 P4 P5 Q1 Q2 Q3 Q4 Q5
1: NA NA NA NA NA NA NA NA NA NA
2: NA NA NA NA NA NA NA NA NA NA
3: NA NA NA NA NA NA NA NA NA NA
4: NA NA NA NA NA NA NA NA NA NA
5: NA NA NA NA NA NA NA NA NA NA
6: NA NA NA NA NA NA NA NA NA NA
replacement = c(1, 2, 3, 4, 5)
# my_dt[i == 2, names(my_dt)[1:5]] = replacement
# my_dt[i == 2, names(my_dt)[1:5] := replacement]
# my_dt[2, names(my_dt)[1:5]] = replacement
# my_dt[2, names(my_dt)[1:5] := replacement]
然而,四个注释行都没有正确替换。感谢您的帮助!
谢谢, 卡诺维斯
【问题讨论】:
-
可能不是您要查找的内容,但是如何将您的内容写入数据框,然后将其转换为数据表?
-
我想使用数据表来加速我的代码,性能对于这个项目非常重要。我经常需要访问这个 df / dt 的子集并更新它们的值,我认为访问 dt 的子集比访问 df 的子集要快。所以这就是为什么我不想写入数据框
-
你不应该需要这个。你这样做让我怀疑你应该使用稀疏矩阵而不是 data.table。
标签: r data.table