无法理解列表和数据框架交互

时间:2015-06-17 15:47:41

标签: r

我有一个数据框列表,可以使用帮助理解调用某些数据的约定,因为我的电线交叉了。 我试图将多个数据帧中的多个列组合成一个数据帧,最后我将主要使用折线图来说明一段时间内的趋势。但是,我一直试图制作一个数据框。

以下是一些示例数据,它们将在列表中创建两个数据框,代表我的数据结构:

ValueID <- c(1610, 1638, 1651, 1652, 1741, 1748, 1759, 1761, 1766)
Area <- c(136300, 73900, 230000, 178700, 54700, 4500, 120000, 3400, 45000)
Dep2001 <- c(6.14, 5.02, 5.84, 5.84, 4.69, 6.84, 5.09, 5.34, 7.84)
Dep2002 <- c(8.23, 7.11, 7.93, 7.93, 6.78, 8.93, 7.18, 7.43, 9.93)
a <- data.frame(ValueID, Area, Dep2001)
b <- data.frame(ValueID, Area, Dep2002)
aa <- list(a, b)
names(aa) <- c("a", "b")

我正在尝试使用Value {,Area,Dep2001,Dep2002,Dep2003等创建一个数据框(如您所见,每个数据框在ValueID中都有一个公共ID字段),使用{ {1}}函数或apply循环从数百个数据框的列表中添加列Dep2001,Dep2002等。

我是这样开始的:

for

...但我不认为我在这里正确。

所以,我试图弄清楚如何调用所有“Dep”列的列表(它们也总是第三列)。但是,虽然q <- names(aa) bb <- as.data.frame(aa[[1]][c(1:2)]) apply(bb, q, cbind, aa) 调用第一个数据帧的第三列而aa[[1]][3]调用前两个数据帧,但我无法获得某种类型的组合来调用每个数据帧的列表。每个数据框中的第三个/ Dep列;这是我尝试过的一个不起作用的例子:

aa[c(1:2)]

我对R来说还是个新手,对编程很新,所以可能有一个非常基本的解决方案。感谢。

3 个答案:

答案 0 :(得分:0)

这将返回dfs列表第三列的值列表:

bb = lapply(aa, function(x) x[,3])

答案 1 :(得分:0)

如果AreaValueID总是在所有data.frame s

中排序相同
res <- data.frame(ValueID, Area, as.data.frame(lapply(aa, `[`, 3)))

apply函数将参数作为列表,因此您通常不需要创建匿名函数。在这种情况下,函数是[,其中一个子集函数,你传递参数&#34; 3&#34;,告诉它取第三列。如果AreaValueID未排序,您可以按照建议使用Reducemerge

编辑:因为您的data.frames有不同的行

Reduce(function(a, b) merge(a, b, by=c("ValueID", "Area"), all=T), aa)

答案 2 :(得分:0)

如果您有很多数据框,也许您可​​以尝试使用rbindlist转换为一个数据集,然后使用dcast.data.table将其转换为行格式。

类似的东西:

data <- rbindlist(aa)
data[, type := paste0("Dep", floor(seq(from = 2001, to = 2003-0.001, by = 1/9)))]

dcast.data.table(data, ValueID + Area  ~ type, value.var = "Dep2001", fun = mean)