在R中使用长数据格式

在R中使用长数据格式,r,split,R,Split,你好 d <- c(1,1,1,2,2,2,3,3,3) e <- c(5,6,7,5,6,7,5,6,7) f <- c(0,0,1,0,1,0,0,0,1) df <- data.frame(d,e,f) d其他人可以提供基本的R解决方案,但这里有一种方法可以使用plyr来实现这一点: > ddply(df,.(d),transform,g = head(e[f != 0],1)) d e f g 1 1 5 0 7 2 1 6 0 7 3 1 7 1 7

你好

d <- c(1,1,1,2,2,2,3,3,3)
e <- c(5,6,7,5,6,7,5,6,7)
f <- c(0,0,1,0,1,0,0,0,1)
df <- data.frame(d,e,f)

d其他人可以提供基本的R解决方案,但这里有一种方法可以使用plyr来实现这一点:

> ddply(df,.(d),transform,g = head(e[f != 0],1))
  d e f g
1 1 5 0 7
2 1 6 0 7
3 1 7 1 7
4 2 5 0 6
5 2 6 1 6
6 2 7 0 6
7 3 5 0 7
8 3 6 0 7
9 3 7 1 7
请注意,我按字面意思记下了您关于“第一个非零元素”的注释,即使您的示例数据在列(按组)中只有一个唯一的非零元素

g
foo <- function(x){which(x>0)[1]}
df$t <- ave(df$f,df$d,FUN=foo)
> ddply(df,.(d),transform,g = head(e[f != 0],1))
  d e f g
1 1 5 0 7
2 1 6 0 7
3 1 7 1 7
4 2 5 0 6
5 2 6 1 6
6 2 7 0 6
7 3 5 0 7
8 3 6 0 7
9 3 7 1 7