R根据列之间的匹配替换列中的值

时间:2019-10-25 21:51:05

标签: r dataframe

我有两个数据框,每个数据框具有相同的列。在两个数据帧中,某些列具有相同的值,并且顺序相同(下面的X1X2)。其他列具有相同的值,但顺序不同(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的值匹配。

我想更改Y1X1而不是X2,因为有很多Y1变量。我只想对Y这样做。

输出应如下所示:

df$X1 == "a"

1 个答案:

答案 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