R按行名称df2对行df1进行排序

时间:2014-07-15 17:31:10

标签: r

我试图将bai.out和bai.in函数用作dplR库的一部分。要使用它,我的直径data.frame(本例中为df1)中的行顺序必须与我的rwl data.frame中的列顺序相匹配(本例中为df2)。但是,我不确定如何根据另一个data.frame的列重新排序一个data.frame的行(在此示例中,它们按数字重新排序,但情况并非总是如此)。任何帮助,将不胜感激。感谢。

示例:

DF1:

Name <- c("t1", "t4", "t5", "t2", "t3")    
Diameter <- c(3.2, 4.5, 1.4, 3.9, 2.7)    
df1 <- data.frame(Name, Diameter) 

DF2:

Year <- c(2008, 2009, 2010, 2011, 2012)    
t1 <- c(0.8, 0.3, 0.4, 0.1, 0.7)    
t2 <- c(0.9, 0.2, 0.7, 0.4, 0.5)    
t3 <- c(0.1, 0.4, 0.9, 0.6, 0.2)    
t4 <- c(0.4, 0.8, 0.1, 0.8, 0.3)    
t5 <- c(0.3, 0.7, 0.3, 0.2, 0.9)    
df2 <- data.frame(Year, t1, t2, t3, t4, t5)

df1的预期输出:

df1reorderd:

Name <- c("t1", "t2", "t3", "t4", "t5")    
Diameter <- c(3.2, 3.9, 2.7, 4.5, 1.4)    
df1reordered <- data.frame(Name, Diameter)

2 个答案:

答案 0 :(得分:2)

也许您可以使用match

df1[match(df1$Name, setdiff(names(df2), "Year")), ]
#   Name Diameter
# 1   t1      3.2
# 4   t2      3.9
# 5   t3      2.7
# 2   t4      4.5
# 3   t5      1.4

我已经使用setdiff来放弃&#34;年&#34;来自names(df2),但还有其他方法可以达到同样的效果。

答案 1 :(得分:1)

替代解决方案

rownames(df1) = df1$Name
df1 = df1[names(df2)[-1],]

然后可选择再次摆脱rownames;

rownames(df1) = NULL