gpt4 book ai didi

r - 子索引列表以在 R 中应用函数

转载 作者:行者123 更新时间:2023-12-02 06:32:19 24 4
gpt4 key购买 nike

我在 R 中有一个包含 4 个数据帧的列表,这样列表中的每个元素都包含按原子数(因子)排序的数据,例如

$P1
AtomNum Moiety Energy
1519 P1 -1.2
1519 P1 -1.6
1520 P1 -2.3
1520 P1 -2.4
1521 P1 -3.6
1521 P1 -3.1

$P1'
AtonNum Moiety Energy
1522 P1' -3.5
1522 P1' -3.1
1523 P1' -2.5
1523 P1' -2.9
1524 P1' -1.8
1524 P1' -1.5

$P2
AtomNum Moiety Energy
1525 P2 -1.1
1525 P2 -1.9
1526 P2 -1.8
1526 P2 -1.7
1527 P2 -3.1
1527 P2 -2.9

$P2'
AtomNum Moiety Energy
1528 P2' -3.4
1528 P2' -3.6
1529 P2' -2.7
1529 P2' -2.5
1530 P2' -1.7
1530 P2' -1.2

我不知道这是否可行,但我想取每个原子(组)能量值的平均值,然后对列表中每个元素的这些值求和。效果为

sum(mean(x$AtomNum)) where x is the list

我可以对列表形式的数据执行此操作吗?

最佳答案

如果您需要通过 AtomNumMoiety 求能量的平均值,然后通过 Moiety 求和,您可以使用 数据表:

require(data.table)
l_dt <- rbindlist(ll)
l_dt[, mean(Energy), by=.(AtomNum, Moiety)][, .(Energy=sum(V1)), by=Moiety]
# Moiety Energy
#1: P1 -7.10
#2: P2 -6.25

数据

ll <- structure(list(P1 = structure(list(AtomNum = c(1519L, 1519L, 
1520L, 1520L, 1521L, 1521L), Moiety = structure(c(1L, 1L, 1L,
1L, 1L, 1L), .Label = "P1", class = "factor"), Energy = c(-1.2,
-1.6, -2.3, -2.4, -3.6, -3.1)), .Names = c("AtomNum", "Moiety",
"Energy"), class = "data.frame", row.names = c(NA, -6L)), P2 = structure(list(
AtomNum = c(1525L, 1525L, 1526L, 1526L, 1527L, 1527L), Moiety = structure(c(1L,
1L, 1L, 1L, 1L, 1L), .Label = "P2", class = "factor"), Energy = c(-1.1,
-1.9, -1.8, -1.7, -3.1, -2.9)), .Names = c("AtomNum", "Moiety",
"Energy"), class = "data.frame", row.names = c(NA, -6L))), .Names = c("P1",
"P2"))

编辑

如果你有一个 data.frame df 而不是一个列表,你可以这样做:

require(data.table)
setDT(df)[, mean(Energy), by=.(AtomNum, Moiety)][, .(Energy=sum(V1)), by=Moiety]

或者,如@DavidArenburg 所述,使用 dplyr:

require(dplyr)
df %>%
group_by(Moiety, AtomNum) %>%
summarise(Energy = mean(Energy)) %>%
summarise(sum(Energy))

关于r - 子索引列表以在 R 中应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31139749/

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