例如,我有一个看起来像iris的数据帧。我想创建另一个名为C1的列,它是所有刚毛萼片的乘法。长度2.5,全部花色萼片。长度为3.5,全部为维吉尼亚萼片。长度增加4.5。有人能帮我编码吗?
预料之外
萼片。萼片长。宽花瓣。长花瓣。宽度物种C1 5.1 3.5 1.4 0.2刚毛5.1*2.5 4.9 3.0 1.4 0.2刚毛4.9*2.5“
6.4 3.2 4.5 1.5 versicolor 6.4*3.5
6.9 3.1 4.9 1.5 versicolor 6.9*3.5
'' '' '' '' '' ''
7.1 3.0 5.9 2.1 virginica 7.1*4.5
6.3 2.9 5.6 1.8 virginica 6.3*4.5
'' '' '' '' '' ''
一个选项是创建一个名为的向量
来替换基于“物种”的值,并用“Sepal”相乘。长
library(dplyr)
iris <- iris %>%
mutate(C1 = Sepal.Length * set_names(c(2.5, 3.5, 4.5),
c("setosa", "versicolor", "virginica"))[as.character(Species)])
head(iris, 3)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species C1
#1 5.1 3.5 1.4 0.2 setosa 12.75
#2 4.9 3.0 1.4 0.2 setosa 12.25
#3 4.7 3.2 1.3 0.2 setosa 11.75
另一种方法是使用合并/联接方法来确定将2.5、3.5和4.5中的哪一个用作乘数。
iris2 <- merge(iris,
data.frame(Species=c("setosa", "versicolor", "virginica"), mult=c(2.5,3.5,4.5)),
by = "Species")
head(iris2)
# Species Sepal.Length Sepal.Width Petal.Length Petal.Width mult
# 1 setosa 5.1 3.5 1.4 0.2 2.5
# 2 setosa 4.9 3.0 1.4 0.2 2.5
# 3 setosa 4.7 3.2 1.3 0.2 2.5
# 4 setosa 4.6 3.1 1.5 0.2 2.5
# 5 setosa 5.0 3.6 1.4 0.2 2.5
# 6 setosa 5.4 3.9 1.7 0.4 2.5
由此,计算起来很琐碎:
head(iris2$mult * iris2$Sepal.Length, n = 10)
# [1] 12.75 12.25 11.75 11.50 12.50 13.50 11.50 12.50 11.00 12.25
并将其存储在列中或其他位置。