0

我的大部分问题只是如何提取和组织数据,没有事先培训,我为我无法清楚地表达我想要的东西而道歉。我希望我什至知道如何用短语来在教科书或网上查找它们。这是我现在的问题:

我有一个信息数据框,它有一个称为 ID 的唯一组 ID,有 153 个唯一 ID,但我有超过 6,000 行来自这些组的信息。

我想做的是一次从两组中获取所有信息,并写出一个包含所有相关信息的简单 csv 文件。当总体人数为奇数(n = 153)时,这将如何运作。

我想是这样的:

IDs = unique(dat$ID)
for (i in length(IDs)){
    IDgp = subset(dat, dat$ID==IDs[i] & dat$ID==IDs[i+1])
    write.csv(IDgp, paste(IDgp[i],".csv")
    i = i+2
    }

这不起作用,我不知道如何让它增加到下一个“2 组”。我知道 for 循环很笨重,我曾认为 ddply 可能会起作用,甚至是 which 命令而不是子集。由于在 RI 中有多种做事方式,因此我什至不知道该怎么称呼我想做的事情。我想我已经把它复杂化了。

我一直在寻找答案,并认为这是一种可能性,但不知道如何让它一次为超过 1 个组编写信息,而且我不清楚 function(x) 命令在做什么:

d_ply(dat, "ID", function(x)
     write.csv(x[i], file = paste(x$ID[i], ".csv")
     , row.names = FALSE))
4

2 回答 2

1

也许这会有所帮助。但我认为有一种更优雅的方法可以做到这一点。

IDs = unique(dat$ID)
for (i in seq(1, length(IDs), 2)){
  write.csv(dat[dat$ID %in% IDs[i+c(0,1)], ], 
    paste(IDs[i], "_", IDs[i+1], ".csv", sep=""))
}

编辑以创建全长 ID 的序列

于 2012-04-23T19:29:46.193 回答
1

这是一种方法,可以根据您的 ID 构建适当维度的矩阵,然后循环遍历它们:

dat <- data.frame(id = 1:10, foo = runif(10))
#This will throw a warning if dimensions don't line up, not sure what you want to do with those
idpairs <- matrix(sort(unique(dat$id)), ncol = 2, byrow = TRUE)
> head(idpairs,2)
     [,1] [,2]
[1,]    1    2
[2,]    3    4
a_ply(idpairs, 1, function(x) print(dat[dat$id  %in% x,]))

你显然会用print适合你目的的任何东西替换上面的函数。

于 2012-04-23T19:41:52.477 回答