从R中的3列数据框中选择值

时间:2011-04-11 15:17:05

标签: r

我有一个三维数组,变量是x,y和z。 x是位置列表,y是时间列表,z是名称列表。名称列表不会在各个地方的相同初始时间开始:

x   y   z
x1  1   NA
x1  2   z2
x1  3   z3
x1  4   z1
x2  1   NA
x2  2   NA
x2  3   z5
x2  4   z3
x3  1   z3
x3  2   z1
x3  3   z2
x3  4   z2

如何找到每个x的第一个z?我希望输出矩阵或数据帧为:

x  z
x1 z2
x2 z5
x3 z3

2 个答案:

答案 0 :(得分:1)

已提供示例数据后已编辑

您可以在包ddply()

中使用功能plyr
dat <- "x   y   z
x1  1   NA
x1  2   z2
x1  3   z3
x1  4   z1
x2  1   NA
x2  2   NA
x2  3   z5
x2  4   z3
x3  1   z3
x3  2   z1
x3  3   z2
x3  4   z2"

df <- read.table(textConnection(dat), header=TRUE, stringsAsFactors=FALSE)

library(plyr)
ddply(df, .(x), function(x)x[!is.na(x$z), ][1, "z"])

   x V1
1 x1 z2
2 x2 z5
3 x3 z3

答案 1 :(得分:0)

如果您不想使用plyr

t(data.frame(lapply(split(df, as.factor(df$x)), function(k) head(k$z[!is.na(k$z)], 1))))

   [,1]
x1 "z2"
x2 "z5"
x3 "z3"