Добавить новую строку для результата простого уравнения, используя группы строк в R - PullRequest
0 голосов
/ 30 мая 2018

У меня проблемы с этой простой задачей.

В следующем 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 голосов
/ 30 мая 2018

Ответ от @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
0 голосов
/ 30 мая 2018

Нам нужно создать столбец, прежде чем транспонировать, так как t преобразуется в matrix, а matrix может содержать только один 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...