我正在尝试在两个不同的数据框中合并信息,但问题始于不均匀的维度,并且尝试不使用列索引而是使用列中的信息。 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
注意更改了A
,D
和H
的信息。
感谢。
答案 0 :(得分:3)
%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>
`);
}