gpt4 book ai didi

r - 学习data.table - 如何按行号和列名更新值

转载 作者:行者123 更新时间:2023-12-04 17:07:57 25 4
gpt4 key购买 nike

我最近的几篇文章写得不好,所以这次我会努力做得更好更干净。

我正在学习如何使用数据表对象,我正在努力解决的一项任务是同时通过行号和列名更新数据表中的值。使用 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]

然而,四个注释行都没有进行正确的替换。感谢任何帮助!

谢谢,
卡诺维斯

最佳答案

或者你可以这样做:

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

关于r - 学习data.table - 如何按行号和列名更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38854267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com