如何将特定的行和列值乘以常数来创建新列?

Posted

技术标签:

【中文标题】如何将特定的行和列值乘以常数来创建新列?【英文标题】:How can I multiply specific rows and column values by a constant to create a new column? 【发布时间】:2020-02-27 04:32:04 【问题描述】:

例如,我有一个看起来像 iris 的数据框。我想创建另一个名为 C1 的列,它是所有 setosa Sepal.Length 乘以 2.5、所有 Versicolor Sepal.Length 乘以 3.5 和所有 Virginica Sepal.Length 乘以 4.5 的乘积。有人可以帮我编码吗?

预计结束

Sepal.Length Sepal.Width Petal.Length Petal.Width 种类 C1 5.1 3.5 1.4 0.2 濑尿 5.1*2.5 4.9 3.0 1.4 0.2 setosa 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
        ''          ''           ''          ''        ''            ''

【问题讨论】:

如果以下任何一项有效,您能否将答案标记为正确以供将来参考? 【参考方案1】:

一个选项是创建一个名为vector 以替换基于“物种”的值并与“Sepal.Length”相乘

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】:

另一种方法是使用合并/连接方法来确定将 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

并将其存储在列中或其他位置。

【讨论】:

以上是关于如何将特定的行和列值乘以常数来创建新列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 VBA 中显示选择查询的行和列值

在EXCEL中 如何用VBA查找某特定单元格并返回该单元格的行和列值?

读取特定的行和列 C++

TableLayoutPanel隐藏指定的行和列 求指导

Python - 如何在 Python 中从 Google 表格中读取特定范围的行和列?

从 SQL 数据库中选择特定的行和列