我的最后几篇文章写得不好,所以这次我会尝试做一份更好,更清洁的工作.
我正在学习如何使用数据表对象,我正在努力解决的一个任务是同时更新数据表中的行号和列名.使用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
Run Code Online (Sandbox Code Playgroud)
所以,使用数据帧相当容易.但是,我正在与数据表一起努力完成同样的任务.使用与上面的数据帧相同的结构作为示例数据表,我尝试了以下内容:
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]
Run Code Online (Sandbox Code Playgroud)
但是,四条评论专线中没有一条做出正确的替代.感谢任何帮助!
谢谢,Canovice
或者你可以这样做:
x <- names(my_dt)[1:5]
my_dt[, (x) := lapply(.SD, as.numeric), .SDcols = x]
my_dt[2, (x):= as.list(replacement)]
Run Code Online (Sandbox Code Playgroud)
首先,我们将目标列转换my_dt为numeric..SDcols表示.SD我们感兴趣的列的子集..SD保存所有列data.table(除了使用的列by).
将目标列转换为数字后,我们通过引用更新值.
注意:没有必要事先定义x,一切都可以动态完成.但是,如果定义x,则需要将其包装()以确保data.table不查找列x