gpt4 book ai didi

r - 将列列表除以第二个列列表

转载 作者:行者123 更新时间:2023-12-04 09:27:11 26 4
gpt4 key购买 nike

我有生成 data.table 的脚本对于某些列,我想除以其他一些列并将结果存储在新列中。这是一个例子。

library(data.table)
dt <- data.table(V1 = c( 5.553465, 4.989168, 2.563682, 6.987971, 19.220936),
V2 = c(4.248335, 19.768138, 3.840026, 17.411003, 17.939368),
V3 = c(9.683953, 15.344424, 11.729091, 7.534210, 5.404000),
V4 = c(5.949093, 4.553023, 9.765656, 11.211069, 4.085964),
V5 = c(11.814671, 5.460138, 2.492230, 1.48792, 8.164280))

list1 <- list(c("V1", "V2", "V3"))
list2 <- list(c("V2", "V4", "V5"))
listRatio <- list(c("rat1","rat2","rat3"))
我尝试了多种方法来将 list1 元素中的值除以 list2 元素中的值,但没有成功。两个在下面;两者都不起作用。
dt[, (listRatio) := list1/list2]
dt[, c("rat1","rat2","rat3") := mapply(dt, function(x,y) x / y, x = c(V1, V2, V3), y = c(V2, V4, V5))]

最佳答案

我们需要转换 listvector通过使用 [[然后获取 list 中每个向量的值与 mget , 使用 Map划分( / )每个 list 的对应列值并将其分配给向量 ( listRatio[[1]] )。

dt[, (listRatio[[1]]) := Map(`/`, mget(list1[[1]]), mget(list2[[1]]))]
dt
# V1 V2 V3 V4 V5 rat1 rat2 rat3
#1: 5.553465 4.248335 9.683953 5.949093 11.814671 1.3072098 0.7141147 0.8196549
#2: 4.989168 19.768138 15.344424 4.553023 5.460138 0.2523843 4.3417611 2.8102630
#3: 2.563682 3.840026 11.729091 9.765656 2.492230 0.6676210 0.3932174 4.7062635
#4: 6.987971 17.411003 7.534210 11.211069 1.487920 0.4013537 1.5530190 5.0635854
#5: 19.220936 17.939368 5.404000 4.085964 8.164280 1.0714389 4.3904861 0.6619077

注意:正如评论中提到的@Frank,最好创建一个 vector变量名而不是 list .

关于r - 将列列表除以第二个列列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37802687/

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