使用R中的行组为简单等式的结果添加新行

时间:2018-05-30 05:56:05

标签: r dataframe

我在完成这项简单任务时遇到了麻烦。

在以下data.frame中,如何为每列添加包含Sepal.Length*0.75 + Sepal.Width*0.25结果的额外行?谢谢

as.data.frame(t(iris[1:5,1:4]))
               1   2   3   4   5
Sepal.Length 5.1 4.9 4.7 4.6 5.0
Sepal.Width  3.5 3.0 3.2 3.1 3.6
Petal.Length 1.4 1.4 1.3 1.5 1.4
Petal.Width  0.2 0.2 0.2 0.2 0.2

2 个答案:

答案 0 :(得分:3)

来自@akrun的答案似乎是最好的,但如果您只想使用最终数据集,可以使用行引用 -

x <- as.data.frame(t(iris[1:5,1:4]))
x[c('new'),] <- x[c('Sepal.Length'), ]*0.75 + x[c('Sepal.Width'), ]*0.25

答案 1 :(得分:2)

我们需要在转置之前创建一个列,因为t会转换为matrixmatrix只能容纳一个class。由于“虹膜”的第五列不是“数字”,因此在进行转置时,整个matrix会转换为character。因此,不是在事后进行计算,而是在转置之前进行

df1 <- iris[1:5,]
df1$new <- with(df1, Sepal.Length * 0.75 + Sepal.Width *25)
t(df1)

更新

根据更新的结构,我们根据行名称对矩阵'm1'的行进行子集,进行计算并使用原始矩阵进行rbind

m1 <- as.data.frame(t(iris[1:5,1:4]))
m2 <- rbind(m1, new = m1["Sepal.Length",] * 0.75 + m1["Sepal.Width", ] * 0.25)
m2
#              1     2     3     4    5
#Sepal.Length 5.1 4.900 4.700 4.600 5.00
#Sepal.Width  3.5 3.000 3.200 3.100 3.60
#Petal.Length 1.4 1.400 1.300 1.500 1.40
#Petal.Width  0.2 0.200 0.200 0.200 0.20
#new          4.7 4.425 4.325 4.225 4.65