2016-04-19 3 views
0

У меня есть матрица, называемая mydf. Как получить обратный столбцов A и C, как показано в результате?Обратное значение столбца в R

mydf

A B C 
2 2 2 
1 3 2 

результат

A B C 
0.5 2 0.5 
1 3 0.5 
+5

'mydf [, гр («A», «C»)] <- 1/mydf [, c («A», «C»)] ' – nicola

+0

@DavidArenburg Это верно. Должно быть довольно просто, но нужно только для определенных столбцов. – MAPK

ответ

2

Мы можем попробовать

mydf[c(1,3)] <- lapply(mydf[c(1,3)], function(x) 1/x) 
mydf 
# A B C 
#1 0.5 2 0.5 
#2 1.0 3 0.5 

Или с помощью dplyr

library(dplyr) 
mydf %>% 
     mutate_each(funs(1/.), -one_of("B")) 

Примечание: Здесь я предполагаю, что в «mydf» как data.frame

+1

Укажите, что 'mydf' должен быть' data.frame' и не может быть матрицей. Если вы попробуете это на 'matrix' (как сказал OP, несмотря на имя' mydf'), все не закончится хорошо ... – nicola

2

Я рекомендовал бы создать новую данные кадр, а затем инвертировать столбцы, которые нужно инвертирования

mydf <- data.frame(A=c(2,1), B=c(2,3), C=c(2,2)) 
mydf2 <- mydf 
mydf2[,c(1,3)] <- mydf2[,c(1,3)]^(-1) 
mydf2 
# A B C 
#1 0.5 2 0.5 
#2 1.0 3 0.5