我经常需要在数据文件之间传输数据。数据来源的数据通常是数据的一个较小的子集。
让我说我有这个数据:
df <- data.frame(ID = c(1,3,6,9), variable = c(-0.1, 0, 0, 0.1))
ID variable
1 1 -0.1
2 3 0.0
3 6 0.0
4 9 0.1我需要将variable从df传输到sleep,但只在ID在df和sleep中相同的行中。
为此,我通常使用如下的for循环:
sleep$variable <- NA
for (i in seq_along(sleep$ID)) {
x <- which(sleep$ID == df$ID[i])
sleep$variable[x] <- df$variable[i]
}
sleep
extra group ID variable
1 0.7 1 1 -0.1
2 -1.6 1 2 NA
3 -0.2 1 3 0.0
4 -1.2 1 4 NA
5 -0.1 1 5 NA
6 3.4 1 6 0.0
7 3.7 1 7 NA
8 0.8 1 8 NA
9 0.0 1 9 0.1
10 2.0 1 10 NA
11 1.9 2 1 -0.1
12 0.8 2 2 NA
13 1.1 2 3 0.0
14 0.1 2 4 NA
15 -0.1 2 5 NA
16 4.4 2 6 0.0
17 5.5 2 7 NA
18 1.6 2 8 NA
19 4.6 2 9 0.1
20 3.4 2 10 NA我正在寻找一个函数,它将实现相同的结果,但需要更少的代码。理想情况下,我希望函数只使用3个参数:数据来自的向量、数据指向的向量以及用于匹配两个数据流中的行的向量。
在R中是否存在这样的功能?或者,有人能提供这样的功能吗?
发布于 2014-04-01 18:20:40
match怎么样?
sleep <- data.frame(extra = runif(100), group = rep(1:10, each = 10), ID = rep(1:10, times = 10))
sleep$variable <- df$variable[match(sleep$ID, df$ID)]这需要四个参数(ID被重复,可以说是不必要的)。
https://stackoverflow.com/questions/22793341
复制相似问题