r - R中的混合合并 - 下标解决方案?

标签 r merge subscript

注:我从第一次发布时更改了示例。我的第一个例子过于简单,无法捕捉到真正的问题。

我有两个数据框,它们在一列中的排序方式不同。我想匹配一列,然后合并第二列中的值。第二列需要保持相同的顺序。

所以我有这个:

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

我要让自己傻了,试图解决这个问题。看起来应该是一个简单的下标问题。

最佳答案

有几种方法可以做到这一点(毕竟是 R),但我认为最清楚的是创建索引。我们需要一个创建顺序索引的函数(从 1 开始,以观察次数结束)。

seq_len(3) 
> [1] 1 2 3

但是我们需要在每个分组变量(状态)内计算这个指数。为此,我们可以使用 R 的 ave功能。它接受一个数字作为第一个参数,然后是分组因子,最后是要在每个组中应用的函数。
s1$index <- with(s1,ave(value1,state,FUN=seq_len))
s2$index <- with(s2,ave(value2,state,FUN=seq_len))

(注意 with 的使用,它告诉 R 在环境/数据帧中搜索变量。这是比使用 s1$value1、s2$value2 等更好的做法。)

现在我们可以简单地合并(连接)两个数据帧(通过两个数据帧中存在的变量:状态和索引)。
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 而不是按照 hadley 的建议创建新函数。]

关于r - R中的混合合并 - 下标解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1301759/

相关文章:

mercurial - merge 两个不相关的 Mercurial 存储库后如何调整历史记录?

linux - 合并 uniq -c 的结果

CSS 粗体文本下标与图像在同一行

android - Android App XML 中的上标和下标

r - 更改字体类型并在 corrplot 相关图的标签中添加下标或希腊字母

r - 更改 RStudio_AMI 上的文档根目录

从日志中复制表格和绘图

r - 确定脚本是否在 RStudio 笔记本中运行

r - 在 ggplot2 的条形图中为分类变量添加阴影替代区域

Python 将每月和分钟数据帧与 TZ 感知的日期时间索引相结合