-->

混合合并中的R - 标解决方案吗?(Mixed Merge in R - Subscript so

2019-08-01 18:10发布

注: 我改变从我第一次张贴的例子。 我的第一个例子是过于简单化捕捉真正的问题。

我有在一列不同方式排序的两个数据帧。 我想匹配的一列,然后从第二列中的值合并。 第二列需要留在同一顺序。

所以我有这样的:

state<-c("IA","IA","IA","IL","IL","IL")
value1<-c(1,2,3,4,5,6)
s1<-data.frame(state,value1)
state<-c("IL","IL","IL","IA","IA","IA")
value2<-c(3,4,5,6,7,8)
s2<-data.frame(state,value2)

s1
s2

返回此:

> s1
  state value1
1    IA      1
2    IA      2
3    IA      3
4    IL      4
5    IL      5
6    IL      6
> s2
  state value2
1    IL      3
2    IL      4
3    IL      5
4    IA      6
5    IA      7
6    IA      8

我想这一点:

  state value1 value2
1    IA      1      6
2    IA      2      7
3    IA      3      8
4    IL      4      3
5    IL      5      4
6    IL      6      5

我要自己开车傻试图解决这个问题。 似乎应该是一个简单的标问题。

Answer 1:

有几种方法可以做到这一点(它是R,毕竟),但我认为最明显的是建立一个索引。 我们需要创建一个顺序索引(从1开始,并与观测次数结束)的功能。

seq_len(3) 
> [1] 1 2 3

但是,我们需要在每个分组变量(州)内计算出该指标。 为此,我们均可以使用的ave功能。 它需要一个数字作为第一个参数,则该分组的因素,最后功能每组中得以应用。

s1$index <- with(s1,ave(value1,state,FUN=seq_len))
s2$index <- with(s2,ave(value2,state,FUN=seq_len))

(注意使用with ,它告诉R键搜索环境/数据帧中的变量。这比使用S1 $值1,S2 $值2,等更好的做法)

现在,我们可以简单地合并(加入)的两个数据帧(由存在于两个数据帧中的变量:状态和索引)。

merge(s1,s2)

这使

   state index value1 value2
1    IA     1      1      6
2    IA     2      2      7
3    IA     3      3      8
4    IL     1      4      3
5    IL     2      5      4
6    IL     3      6      5

对于这项工作,应该有相同数目的在各数据帧的通过状态的观察。

[编辑:注释为了清楚的代码。] [编辑:用于seq_len,而不是由作为哈德利建议创建一个新的功能。]



Answer 2:

注意:检查上面的答案第五评论。 解决方案应该是

s1$index <- with(s1,ave(value1,state,FUN=seq_along))
s2$index <- with(s2,ave(value2,state,FUN=seq_along))

测试和工作。



文章来源: Mixed Merge in R - Subscript solution?