【问题标题】:How to perform selective rbind on datasets in R如何对 R 中的数据集执行选择性 rbind
【发布时间】:2017-08-27 05:59:54
【问题描述】:

我正在尝试使用 rbind 在国家/地区附加不同的数据集。数据集列表是

data <- c('a1','a2','a3','b1','b2','bu3','bu4','c1','c3')
code <- c('a','b','bu',c)

数据的结构有点像这样——

countrya1 <- c("a","a","a")
yeara1 <- c("1","1","1")
inca1 <- c("1","2","3")
a1 <- data.frame(countrya1,yeara1,inca1)
countrya2 <- c("a","a","a")
yeara2 <- c("2","2","2")
inca2 <- c("1","4","3")
a2 <- data.frame(countrya2,yeara2,inca2)
countryb1 <- c("b","b","b")
yearb1 <- c("1","1","1")
incb1 <- c("1","2","7")
b1 <- data.frame(countryb1,yearb1,incb1)
countryb2 <- c("b","b","b")
yearb2 <- c("2","2","2")
incb2 <- c("6","2","3")
b2 <- data.frame(countryb2,yearb2,incb2)

我用来合并所有数据集的代码如下-

df=NULL
for (i in length(data)){
df1 <-read.dta(data[i])
df <-rbind(df,df1)
} 

这会将所有数据集绑定到 df. 有没有办法将 a1,a2,a3 绑定在一起,将 b1,b2,b3 绑定在一起等等。简而言之,我想通过“代码”绑定数据集。有没有办法在 R 中做到这一点? 在此先感谢您的帮助。

【问题讨论】:

  • 在你的for循环中,它应该是for(i in seq_along(data))
  • 以你的例子,read.dta 给了我错误。请提供一个有效的例子

标签: r append rbind


【解决方案1】:

我们可以split'数据'通过创建一个没有数字的组,然后使用read.dta,读取数据集和rbind同名数据集

lst <- lapply(split(data, sub("\\d+", "", data)), 
             function(x) do.call(rbind, lapply(x, read.dta)))

如果我们想使用'code',那么通过循环'code'来使用grep

lapply(code, function(x) do.call(rbind, lapply(grep(x, data, value = TRUE), read.dta)))

数据

code <- c('a','b','bu','c')

【讨论】:

  • 这很完美!太感谢了。另外,有没有办法使用循环(for-loop?)来做到这一点?
  • @Bhavya 你可以做for(i in seq_along(code)){ i1 &lt;- grep(code[i], data, value = TRUE); lst &lt;- vector("list", length(code)); for(j in seq_along(i1)){ lst[[i]][j] &lt;- read.dta(i1[j]); } lst1 &lt;- lapply(lst, function(x) do.call(rbind, x)); } lst1(未测试)
  • 我明白你在这里想要做什么。但这就是我得到的:“do.call(rbind, x) 中的错误:第二个参数必须是一个列表”
  • 另外,我对 R 和编程很陌生。如果它看起来很明显,我很抱歉。
  • @Bhavya 你应该在你的帖子中提供一些示例数据供其他人测试
猜你喜欢
  • 1970-01-01
  • 2019-08-13
  • 2017-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
相关资源
最近更新 更多