Замена имени переменной в data1 значением Column2 в Data2, когда имя переменной в Data1 совпадает со значением Column1 в Data2 - PullRequest
0 голосов
/ 06 сентября 2018

Я начинающий R. У меня есть два набора данных, как

df1 <- t(data.frame(seq(1,6,by=1),seq(6,1,by=-1)))    
colnames(df1) <- c("ZZZ","YYY","CCC","DDD","XXX","KKK")    
rownames(df1) <- c("a","b")    
Vector1<-c("AAA", "BBB", "CCC", "DDD", "EEE", "FFF")
Vector2<-c("a", "b", "e", "f", "k", "l")
df2<-data.frame(cbind(Vector1, Vector2))

df1 равно

   ZZZ  YYY  CCC  DDD  XXX  KKK
a    1    2    3    4    5    6
b    6    5    4    3    2    1

df2 равно

    Vector1  Vector2
 1  AAA      a
 2  BBB      b
 3  CCC      e
 4  DDD      f
 5  EEE      k
 6  FFF      l

Я хотел бы заменить имя переменной в df1 значением Vector2 в df2, когда имя переменной в df1 совпадает со значением Vector1 в df2.

Итак, в идеале, я хотел бы получить что-то вроде

     ZZZ  YYY  e    f    XXX  KKK
a    1    2    3    4    5    6
b    6    5    4    3    2    1

Я попытался изменить коды, указанные в Сопоставить имена строк и столбцов со значениями в другом фрейме данных . Но мне сложно изменить имя идентифицированной переменной в df1. Любые предложения или комментарии будут высоко оценены.

1 Ответ

0 голосов
/ 06 сентября 2018

match и %in% делают работу. Попробуйте это:

## example 1
df1 <- t(data.frame(seq(1,6,by=1),seq(6,1,by=-1)))    
colnames(df1) <- c("ZZZ","YYY","CCC","DDD","XXX","KKK")    
rownames(df1) <- c("a","b")    
Vector1<-c("AAA", "BBB", "CCC", "DDD", "EEE", "FFF")
Vector2<-c("a", "b", "e", "f", "k", "l")
df2<-data.frame(cbind(Vector1, Vector2))

target <- match(colnames(df1), df2$Vector1, nomatch = 0)
colnames(df1)[colnames(df1) %in% df2$Vector1] <- as.character(df2$Vector2[target])
df1 # output
   ZZZ YYY e f XXX KKK
a   1   2 3 4   5   6
b   6   5 4 3   2   1

#example 2
df1 <- t(data.frame(seq(1,6,by=1),seq(6,1,by=-1)))
colnames(df1) <- c("ZZZ","YYY","CCC","DDD","XXX","KKK")
rownames(df1) <- c("a","b")
Vector1<-c("KKK", "BBB", "DDD", "XXX", "EEE", "FFF")
Vector2<-c("a", "b", "e", "f", "k", "l")
df2<-data.frame(cbind(Vector1, Vector2))

target <- match(colnames(df1), df2$Vector1, nomatch = 0)
colnames(df1)[colnames(df1) %in% df2$Vector1] <- as.character(df2$Vector2[target])
df1 # output
   ZZZ YYY CCC e f a
a   1   2   3 4 5 6
b   6   5   4 3 2 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...