在R中将值的一个成员的值分配给另一个成员

时间:2013-05-23 00:25:33

标签: r plyr reshape

我有兄弟姐妹的身高数据嵌套在两个兄弟姐妹的家庭中:

   ID family sibling height
1   1      1       1    103
2   2      1       2    100
3   3      2       1    102
4   4      2       2     98
5   5      3       1    104
6   6      3       2    100
7   7      4       1     98
8   8      4       2     94
9   9      5       1     95
10 10      5       2    111
11 11      6       1    112
12 12      6       2    113

在每个家庭中使用R,我想创建一个新变量,每个兄弟都分配了他或她的兄弟姐妹身高的值,如下所示:

   ID family sibling height cosib_height
1   1      1       1    103          100
2   2      1       2    100          103
3   3      2       1    102           98
4   4      2       2     98          102
5   5      3       1    104          100
6   6      3       2    100          104
7   7      4       1     98           94
8   8      4       2     94           98
9   9      5       1     95          111
10 10      5       2    111           95
11 11      6       1    112          113
12 12      6       2    113          112

很容易在这两个家庭成员中聚集,例如找到每个家庭的平均身高,但我无法弄清楚如何为每个人分配他/她的共同兄弟的身高。

我怀疑它可以使用reshape或plyr包来完成,但到目前为止我没有运气这样做。

编辑:另一个复杂因素是,在我正在使用的实际数据中,偶尔家中的一个或两个兄弟姐妹将缺少身高数据(身高为NA)。当高度有时缺失时仍然可以使用的任何解决方案都将非常受欢迎。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您的数据名为dat,则可以使用:

dat$cosib_height <- unlist(lapply(split(dat$height, dat$family), rev))

##    ID family sibling height cosib_height
## 1   1      1       1    103          100
## 2   2      1       2    100          103
## 3   3      2       1    102           98
## 4   4      2       2     98          102
## 5   5      3       1    104          100
## 6   6      3       2    100          104
## 7   7      4       1     98           94
## 8   8      4       2     94           98
## 9   9      5       1     95          111
## 10 10      5       2    111           95
## 11 11      6       1    112          113
## 12 12      6       2    113          112

变体:

dat <- transform(dat, cosib_height = ave(height, family, FUN=rev))
相关问题