我试图将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)
答案 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