如果第1列和第2列是特定值,则循环超过2列数据,然后在第3列中返回数据

时间:2017-02-01 10:15:19

标签: r loops

我是R的新手,但我遇到了一个需要一些帮助的问题。

假设我的数据CSV文件中有2列。 (让我们称之为X)

我还有另一个数据文件,我用它来检查CSV文件(我们称之为Y)。

X有3列数据,包含标题:a,b,c。

Y有3列数据,标题相同:a,b,c

我希望R用X中的a和b检查X中的a和b列。

如果X中的a和b分别与Y中的a和b匹配,则Y中的c列用于替换X中的c列。

X中的c列是什么并不重要。

我应该如何制定此代码?

X< - as.vector(a,b,c) Y< - as.vector(a,b,c)

for x in ...

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

使用联接构造: 我更喜欢使用dplyr,但基数中的merge也是可能的。

set.seed(314)

x <- data.frame(a = sample(1:10,10),
                b = sample(1:10,10),
                c = sample(1:10,10))

y <- data.frame(a = sample(1:10,10),
                b = sample(1:10,10),
                c = sample(1:10,10))

library(dplyr)

x %>% left_join(y, by=c('a','b')) %>% mutate(c = ifelse(!is.na(c.y),c.y,c.x))

结果(我保留了c.x和c.y列以供说明):

    a  b c.x c.y  c
1   1  4   7  NA  7
2   3  2   5  NA  5
3   7  9   9  NA  9
4   2  8   2  NA  2
5   8 10   1  NA  1
6   6  7   3  NA  3
7  10  3  10  NA 10
8   5  5   6  NA  6
9   9  1   8   4  4
10  4  6   4  NA  4