Выбор значений из 3-столбцов данных в R - PullRequest
0 голосов
/ 11 апреля 2011

У меня есть трехмерный массив с переменными 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

Как найти первый z для каждого x? Я хочу, чтобы выходная матрица или датафрейм были:

x  z
x1 z2
x2 z5
x3 z3

Ответы [ 2 ]

1 голос
/ 11 апреля 2011

РЕДАКТИРОВАНИЕ, после предоставления данных примера

Вы можете использовать функцию 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
0 голосов
/ 02 июля 2011

Если вы не хотите использовать 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...