gpt4 book ai didi

r - 将数据帧的各个子集乘以不同的向量

转载 作者:行者123 更新时间:2023-12-02 18:54:38 26 4
gpt4 key购买 nike

我想将数据框中的几列乘以值向量。特定的值向量会根据另一列中的值而变化。

--编辑--

如果我使数据集更加复杂,即超过 2 个条件,并且条件在数据集周围随机打乱,会怎么样?

这是我的数据集的示例:

df=data.frame(
Treatment=(rep(LETTERS[1:4],each=2)),
Species=rep(1:4,each=2),
Value1=c(0,0,1,3,4,2,0,0),
Value2=c(0,0,3,4,2,1,4,5),
Value3=c(0,2,4,5,2,1,4,5),
Condition=c("A","B","A","C","B","A","B","C")
)

看起来像:

 Treatment Species Value1 Value2 Value3 Condition
A 1 0 0 0 A
A 1 0 0 2 B
B 2 1 3 4 A
B 2 3 4 5 C
C 3 4 2 2 B
C 3 2 1 1 A
D 4 0 4 4 B
D 4 0 5 5 C

如果Condition=="A",我想将第3-5列乘以向量c(1,2,3)。如果 Condition=="B",我想将第 3-5 列乘以向量 c(4,5,6)。如果 Condition=="C",我想将第 3-5 列乘以向量 c(0,1,0)。因此,生成的数据框将如下所示:

 Treatment Species Value1 Value2 Value3 Condition
A 1 0 0 0 A
A 1 0 0 12 B
B 2 1 6 12 A
B 2 0 4 0 C
C 3 16 10 12 B
C 3 2 2 3 A
D 4 0 20 24 B
D 4 0 5 0 C

我尝试对数据框进行子集化并乘以向量:

t(t(subset(df[,3:5],df[,6]=="A")) * c(1,2,3))

但我无法将子集化的数据框返回到原始数据框。有没有办法在不对数据框进行子集化的情况下执行此操作,以便保留其他列(例如,处理、物种)?

最佳答案

这是一个相当通用的解决方案,您应该能够对其进行调整以满足您的需求。

请注意,outer 调用中的第一个参数是逻辑向量,第二个参数是数字,因此在乘法之前 TRUEFALSE 会被转换分别为 10。我们可以添加 outer 结果,因为条件不重叠,并且 FALSE 元素将为零。

multiples <-
outer(df$Condition=="A",c(1,2,3)) +
outer(df$Condition=="B",c(4,5,6)) +
outer(df$Condition=="C",c(0,1,0))

df[,3:5] <- df[,3:5] * multiples

关于r - 将数据帧的各个子集乘以不同的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6878899/

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