我的最后几篇文章写得不好,所以这次我将尝试做得更好和更清洁。
我正在学习如何使用数据表对象,而我正在努力的一项任务是同时通过行号和列名来更新数据表中的值。使用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]
但是,四个注释行中没有一个进行了正确的替换。感谢任何帮助!
谢谢,Canovice
或者,您可以执行以下操作:
x <- names(my_dt)[1:5]
my_dt[, (x) := lapply(.SD, as.numeric), .SDcols = x]
my_dt[2, (x):= as.list(replacement)]
首先,我们将目标列转换my_dt
为numeric
。.SDcols
表示.SD
我们感兴趣的列的子集。.SD
将中的所有列都保存在其中data.table
(用于中的列除外by
)。
将目标列转换为数值后,我们将通过引用更新值。
注意:不必事先定义x,所有操作均可即时完成。但是,如果您定义x
,则需要将其包装起来()
以确保data.table
不查找该列x
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句