2016-10-27 3 views
2

У меня есть следующие данные:R Умножить конкретные строки и столбцы по постоянной

type <- c(1:4) 
year1 <- c(1:4) 
year2 <- c(1:4) 
year3 <- c(1:4) 
data <- data.frame(type, year1, year2, year3) 

Я хочу, чтобы умножить два нижних строк в столбцах года на два.

type <- c(1:4) 
year1 <- c(1, 2, 6, 8) 
year2 <- c(1, 2, 6, 8) 
year3 <- c(1, 2, 6, 8) 
final <- data.frame(type, year1, year2, year3) 

Как это сделать, не затрагивая другие строки столбцов?

+0

данные [3: 4,] * 2'? – Nate

+1

'data [3: 4, -1] <- 2 * data [3: 4, -1]' –

+0

Очень гибкий подход: 'data [(nrow (data) -1): nrow (data), ] <- data [(nrow (data) -1): nrow (data), grep (pattern = "year", x = names (data))] * 2 –

ответ

2

Вот решение с использованием dplyr и tidyr. Это позволит вам настроить параметры, если хотите.

library(dplyr) 
library(tidyr) 

newdata <- data %>% 
    gather(., year, value, year1:year3) %>% 
    mutate(newvalue = ifelse(type > 2, value * 2, value)) %>% 
    select(-value) %>% 
    spread(., year, newvalue) 
+0

Это сработало, спасибо. –

0

Если вы не знаете длину данных, и если вы хотите, чтобы умножить все столбцы, которые имеют «год» в них вы могли бы сделать:

data[(nrow(data)-1):nrow(data),]<-data[(nrow(data)-1):nrow(data),grep(pattern="year",x=names(data))]*2 

    type year1 year2 year3 
1 1  1  1  1 
2 2  2  2  2 
3 6  6  6  6 
4 8  8  8  8