根据R中第一列中的信息替换其他数据中的值

时间:2017-11-16 14:17:00

标签: r dataframe

我正在尝试在两个不同的数据框中合并信息,但问题始于不均匀的维度,并且尝试不使用列索引而是使用列中的信息。 R或join(dplyr)中的合并函数不适用于我的数据。

我必须使用数据帧(一个是其他人的子集,在最后一列中有更新的信息):

df1=data.frame(Name = print(LETTERS[1:9]), val = seq(1:3), Case = c("NA","1","NA","NA","1","NA","1","NA","NA"))

  Name val Case
1  A   1   NA
2  B   2    1
3  C   3   NA
4  D   1   NA
5  E   2    1
6  F   3   NA
7  G   1    1
8  H   2   NA
9  I   3   NA

Case df1列中的某些行必须使用以下df2中的信息进行更改:

df2 = data.frame(Name = c("A","D","H"), val = seq(1:3), Case = "1")

    Name val Case
1    A   1    1
2    D   2    1
3    H   3    1

因此val列中没有任何重要内容,但我将其添加到示例中,因为我想表明我的列数多于两列,而且我的实际数据比示例大。

基本上,我想通过检查第一列中的信息来更改特定行(在这种情况下,它们是唯一的字母),最后我仍然希望将df1作为最终数据框。

为了更好的解释,我希望看到类似的内容:

  Name val Case
1  A   1    1
2  B   2    1
3  C   3   NA
4  D   1    1
5  E   2    1
6  F   3   NA
7  G   1    1
8  H   2    1
9  I   3   NA

注意更改了ADH的信息。

感谢。

2 个答案:

答案 0 :(得分:3)

来自base-r的

%in%可以拯救。

    df1=data.frame(Name = print(LETTERS[1:9]), val = seq(1:3), Case = c("NA","1","NA","NA","1","NA","1","NA","NA"), stringsAsFactors = F)

    df2 = data.frame(Name = c("A","D","H"), val = seq(1:3), Case = "1", stringsAsFactors = F)




    df1$Case <- ifelse(df1$Name %in% df2$Name, df2$Case[df2$Name %in% df1$Name], df1$Case)

df1

Output:

> df1
  Name val Case
1    A   1    1
2    B   2    1
3    C   3   NA
4    D   1    1
5    E   2    1
6    F   3   NA
7    G   1    1
8    H   2    1
9    I   3   NA

答案 1 :(得分:1)

以下是我使用df1 %>% left_join(df2, by = c("Name")) %>% mutate(val = if_else(is.na(val.y), val.x, val.y), Case = if_else(is.na(Case.y), Case.x, Case.y)) %>% select(Name, val, Case) 做的事情:

function createCard(name, img, description) {
$('#result').append(`
  <div class="col-md-4 col-sm-6 col-xs-12">
    <div class="card" style="height: 200px; border: 2px solid black; border-radius: 5px; overflow: hidden; padding: 15px; margin: 15px 0;">
      <div class="card-content" style="height: 100%; overflow: hidden;">
        <div class="star" style="height: 1.6em;">
          <span class="glyphicon glyphicon-star-empty pull-right"></span>
        </div>
        <div class="row">
          <div class="image col-xs-4" style="margin-top: 10px;">
            <figure style="height: 120px;">
              <img src=${img} alt="" style="max-width: 100%; max-height: 100%;">
            </figure>
          </div>
          <div class="description col-xs-8">
            <h4>${name}</h4>
            <p>${description}</p>
          </div>
        </div>
      </div>
    </div>
  </div>
  `);
}