gpt4 book ai didi

r - 在 R 中使用 plyr 插入数据

转载 作者:行者123 更新时间:2023-12-04 05:53:02 25 4
gpt4 key购买 nike

我正在尝试使用 plyr 和 approx 在观测值之间插入每年的 y 值。

而不仅仅是每个国家的 3 个观察值,

我想要 11 次观察 - 从 1985 年到 1995 年,每年一次。

这是一个示例数据集

country <- c("country a", "country a", "country a",
"country b", "country b", "country b",
"country c", "country c", "country c")
year <- c(1985, 1990, 1995,
1985, 1990, 1995,
1985, 1990, 1995)
y <- c(10, 12, 16,
NA, 23, 20,
12, 16, NA)

data <- data.frame(cbind(country,year,y))

The data set looks like this:
country year y
1 country a 1985 10
2 country a 1990 12
3 country a 1995 16
4 country b 1985 <NA>
5 country b 1990 23
6 country b 1995 20
7 country c 1985 12
8 country c 1990 16
9 country c 1995 <NA>

我可以得到约一个国家的数据的一个子集
a <- subset(data, data$country == "country a")

从 1985 年到 1995 年每年插入 y 值
attach(a)
a.int <- approx(year,y, xout = 1985:1995, method = "linear")

但是如何使用 plyr 为每个国家/地区插入数据?

我试过使用 dlply,但每年的输出值为 NA
attach(data)
int <- dlply(data, .(country), function(i) approx(i$year, i$y, xout = 1985:1995,
method = "linear")$y )

如何同时使用 plyr 和 approx 来插入 y 的值?

此外,一旦我得到正确的 aprrox 输出(将是列表),我该如何 reshape 数据,使其成为原始的长格式?理想情况下,每个国家/地区的数据应有 11 行,一列具有 y 值。

最佳答案

我会使用 ddply而不是 dlply为了这。

country <- c("country a", "country a", "country a",
"country b", "country b", "country b",
"country c", "country c", "country c")
year <- c(1985, 1990, 1995,
1985, 1990, 1995,
1985, 1990, 1995)
y <- c(10, 12, 16,
NA, 23, 20,
12, 16, NA)

data <- data.frame(cbind(country,year,y))

my.func<- function(i) {
estimate <- approx(i$year,
i$y,
xout = 1985:1995,
method = "linear")
return(data.frame(year=estimate$x, y=estimate$y, country=unique(i$country)))
}

> ddply(data, .(country), my.func)
year y country
1 1985 10.0 country a
2 1986 10.4 country a
3 1987 10.8 country a
4 1988 11.2 country a
5 1989 11.6 country a
6 1990 12.0 country a
7 1991 12.8 country a
8 1992 13.6 country a
9 1993 14.4 country a
10 1994 15.2 country a
11 1995 16.0 country a
12 1985 NA country b
13 1986 NA country b
14 1987 NA country b
15 1988 NA country b
16 1989 NA country b
17 1990 23.0 country b
18 1991 22.4 country b
19 1992 21.8 country b
20 1993 21.2 country b
21 1994 20.6 country b
22 1995 20.0 country b
23 1985 12.0 country c
24 1986 12.8 country c
25 1987 13.6 country c
26 1988 14.4 country c
27 1989 15.2 country c
28 1990 16.0 country c
29 1991 NA country c
30 1992 NA country c
31 1993 NA country c
32 1994 NA country c
33 1995 NA country c

sessionInfo()
R version 2.14.2 (2012-02-29)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_PAPER=C LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats graphics grDevices utils datasets grid methods base

other attached packages:
[1] ggplot2_0.8.9 proto_0.3-9.2 reshape_0.8.4 reshape2_1.2.1 plyr_1.7.1

loaded via a namespace (and not attached):
[1] stringr_0.6

但是, approx默认情况下,为提供的最小或最大 X 之外的值返回 NA。见 ?approx对于改变这一点的不同方法。

关于r - 在 R 中使用 plyr 插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9842870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com