我有两个数据帧s1和s2。我想基于匹配的id生成s3。
> s1
Type id status
1 B 3 0
2 B 4 0
3 S 2 1
4 B 1 2
> s2
id status
1 3 88
2 4 99
> s3
Type id status
1 B 3 88
2 B 4 99
3 S 2 1
4 B 1 2
s1=data.frame('Type'=c('B', 'B', 'S', 'B'), 'id'=c(3,4,2,1), 'status'=c(0,0,1,2))
s2=data.frame('id'=c(3,4), 'status'=c(88,99))
我尝试了类似这样的东西,但只有在订购了ID时才会起作用
s1[s1$id %in% match(s2$id,s1$id),]$status <- s2$status
答案 0 :(得分:1)
尝试
s1$status <- ifelse(is.na(match(s1$id, s2$id)), s1$status, s2$status[match(s1$id, s2$id)])
Type id status
1 B 3 88
2 B 4 99
3 S 2 1
4 B 1 2
答案 1 :(得分:0)
或使用dplyr
:
library(dplyr)
s1 <- data.frame('Type'=c('B', 'B', 'S', 'B'), 'id'=c(3,4,2,1), 'status'=c(0,0,1,2))
s2 <- data.frame('id'=c(3,4), 'status'=c(88,99))
s3 <- left_join(s1, s2, by = "id", suffix = c('_s1', '_s2')) %>%
mutate(status = coalesce(status_s2, status_s1)) %>%
select(-status_s1, -status_s2)
s3
答案 2 :(得分:0)
如果您要替换的状态值始终为0,则可以使用<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_name"
android:hint="@string/search_hint" />
和merge
:
rowSums
创建以下内容:
s3 <- data.frame(s1[,1:2],status=rowSums(merge(s1,s2,by='id',all=T,sort=F)[,3:4], na.rm = T))