gpt4 book ai didi

r - 使用 data.table 在两列之间交换值

转载 作者:行者123 更新时间:2023-12-03 23:42:42 26 4
gpt4 key购买 nike

我一直在翻译 this questiondata.table解决方案。 (为简单起见,我将使用相同的数据集)
V2 == "b我想在 V1 <-> V3 之间交换列.

dt <- data.table(V1=c(1,2,4), V2=c("a","a","b"), V3=c(2,3,1))
#V1 V2 V3
#1: 1 a 2
#2: 2 a 3
#3: 4 b 1

下面的代码将是 data.frame 的工作解决方案,然而,由于我使用的是 data.table,这给了我很大的挫败感。没有意识到我现在决心为 data.table 找到解决方案。
dt <- data.table(V1=c(1,2,4), V2=c("a","a","b"), V3=c(2,3,1))
df <- as.data.frame(dt)
df[df$V2 == "b", c("V1", "V3")] <- df[df$V2 == "b", c("V3", "V1")]
# V1 V2 V3
#1 1 a 2
#2 2 a 3
#3 1 b 4

我试过写一个 lapply函数循环遍历我的目标交换列表,试图缩小问题范围以仅替换一个值,尝试以不同的方式调用列名,但都没有成功。
这是我设法获得的最接近的尝试:
> dt[dt$V2 == "b", c("V1", "V3")] <- dt[dt$V2 == "b", c(V3, V1)]
#Warning messages:
#1: In `[<-.data.table`(`*tmp*`, dt$V2 == "b", c("V1", "V3"), value = c(1, :
# Supplied 2 items to be assigned to 1 items of column 'V1' (1 unused)
#2: In `[<-.data.table`(`*tmp*`, dt$V2 == "b", c("V1", "V3"), value = c(1, :
# Supplied 2 items to be assigned to 1 items of column 'V3' (1 unused)

我们怎样才能得到data.table的解决方案?

最佳答案

我们能试试

dt[V2=="b", c("V3", "V1") := .(V1, V3)]

关于r - 使用 data.table 在两列之间交换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36833631/

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