我有兄弟姐妹的身高数据嵌套在两个兄弟姐妹的家庭中:
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)。当高度有时缺失时仍然可以使用的任何解决方案都将非常受欢迎。谢谢!
答案 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))