我有两个数据框,每个数据框具有相同的列。在两个数据帧中,某些列具有相同的值,并且顺序相同(下面的X1
,X2
)。其他列具有相同的值,但顺序不同(Y1
)。这仅对某些级别的第一个变量是个问题(此处,{1}中Y1中的行顺序有所不同,但X1 == "a"
中没有。)示例:
X1 == "b"
我想更改df1 <- data.frame("X1" = c("a", "a", "a", "b", "b", "b"),
"X2" = c("1", "2", "3", "1", "2", "3"),
"Y1" = c("d", "d", "f", "g", "h", "i"))
df2 <- data.frame("X1" = c("a", "a", "a", "b", "b", "b"),
"X2" = c("1", "2", "3", "1", "2", "3"),
"Y1" = c("f", "d", "d", "g", "h", "i"))
和df2$X1
的值,以使两个数据帧与df2$X2
的值匹配。
我想更改Y1
和X1
而不是X2
,因为有很多Y1
变量。我只想对Y
这样做。
输出应如下所示:
df$X1 == "a"
答案 0 :(得分:1)
您遇到的麻烦之处在于,Y1
列中有重复项,它们与X2
列中的不同值相对应。因此,您将必须使其具有独特性。
首先,请确保您的Y1
列是字符向量,而不是因素:
df1 <- data.frame("X1" = c("a", "a", "a", "b", "b", "b"),
"X2" = c("1", "2", "3", "1", "2", "3"),
"Y1" = c("d", "d", "f", "g", "h", "i"),
stringsAsFactors = F)
df2 <- data.frame("X1" = c("a", "a", "a", "b", "b", "b"),
"X2" = c("1", "2", "3", "1", "2", "3"),
"Y1" = c("f", "d", "d", "g", "h", "i"),
stringsAsFactors = F)
为您的Y1
副本提供唯一的名称:
df1$Y1uniq <- make.unique(df1$Y1)
df2$Y1uniq <- make.unique(df2$Y1)
然后,您可以将match()
用于这些唯一值(并在不再需要该列时将其删除):
df1[match(df2$Y1uniq, df1$Y1uniq), ][ , 1:3]
输出:
X1 X2 Y1
3 a 3 f
1 a 1 d
2 a 2 d
4 b 1 g
5 b 2 h
6 b 3 i