R заменить элемент имени df1 на имя другого df2 - PullRequest
1 голос
/ 03 августа 2020

У меня есть 2 фрейма данных, которые представляют разные nrow, df1 nrow = 500, df2 nrow = 30, но все элементы в df1$Taxa присутствуют в rownames(df2)

df1[1:5, ]

   Taxa  Env Correlation     Pvalue Type AdjPvalue Significance
1 C1414   pH -0.44448524 0.01570246    T 0.2774101             
2 C305   pH -0.03514715 0.80462576    V 0.8953632             
3 C6066 Temp -0.26652662 0.16223749    T 0.7098855             
4 C4483 Temp -0.24711638 0.07736761    V 0.7098855             
5 C1161   TS  0.04660032 0.81029772    T 0.8793111 

df2[1:5, ]

        Domain         Phylum
C1414 Bacteria Actinobacteria
C305  Bacteria  Bacteroidetes
C6066 Bacteria       Chlorobi
C4483 Bacteria  Fibrobacteres
C1161 Bacteria  Firmicutes

Итак, я хочу заменить каждое имя элемента столбца Taxa в df1 на столбец Phylum df2, что-то вроде:

df3:

             Taxa  Env Correlation     Pvalue    Type AdjPvalue Significance
1 Actinobacteria   pH    -0.44448524 0.01570246    T 0.2774101             
2 Bacteroidetes    pH    -0.03514715 0.80462576    V 0.8953632             
3 Chlorobi         Temp  -0.26652662 0.16223749    T 0.7098855             
4 Fibrobacteres    Temp  -0.24711638 0.07736761    V 0.7098855             
5 Firmicutes       TS     0.04660032 0.81029772    T 0.8793111

Я пробовал cbind, но проблема в nrow в df1 cbind(df1, df2)

1 Ответ

1 голос
/ 03 августа 2020

Мы могли бы использовать match

df1$Taxa <- df2$Phylum[match(df1$Taxa, row.names(df2))]
df1$Taxa
#[1] "Actinobacteria" "Bacteroidetes"  "Chlorobi"       "Fibrobacteres"  "Firmicutes"    

данные

df1 <- structure(list(Taxa = c("C1414", "C305", "C6066", "C4483", "C1161"
), Env = c("pH", "pH", "Temp", "Temp", "TS"), Correlation = c(-0.44448524, 
-0.03514715, -0.26652662, -0.24711638, 0.04660032), Pvalue = c(0.01570246, 
0.80462576, 0.16223749, 0.07736761, 0.81029772), Type = c("T", 
"V", "T", "V", "T"), AdjPvalueSignificance = c(0.2774101, 0.8953632, 
0.7098855, 0.7098855, 0.8793111)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5"))

df2 <- structure(list(Domain = c("Bacteria", "Bacteria", "Bacteria", 
"Bacteria", "Bacteria"), Phylum = c("Actinobacteria", "Bacteroidetes", 
"Chlorobi", "Fibrobacteres", "Firmicutes")), class = "data.frame", 
row.names = c("C1414", 
"C305", "C6066", "C4483", "C1161"))
...