2013-05-23 5 views
1

У меня есть data.frame, как в следующем примере. Я хочу написать функцию для выполнения этих двух задач для меня в одной функции в R? сначала извлеките значение кадра данных, которое одинаково для x и y, и я хочу сохранить его как числовой вектор, а также сделать остальным в качестве фрейма данных.Извлечь числовой вектор из фрейма данных в R

d = data.frame(x = c(1,7, 2, 9, 11),y=c(6, 7, 8, 9,10)) 
    v = c(7, 9) 
    w = data.frame(x=c(1, 2, 11), y=c(6, 8, 10)) 

Мой результат желания следующим образом:

> result 
    $v 
    [1] 7 9 

    $w 
     x y 
    1 1 6 
    2 2 8 
    3 11 10 

ответ

2

Может быть with это то, что вы хотите?

with(d, list(v = x[x==y] ,w=d[x!=y,])) 
$v 
[1] 7 9 

$w 
    x y 
1 1 6 
3 2 8 
5 11 10 
1

Что-то вдоль этих линий должны делать это слишком

splitdf <- function(df) { 

    if (ncol(df) != 2) stop("df must have 2 columns") 
    ind <- do.call("==", df) 
    list(v = df[ind, 1], w = df[!ind, ]) 
} 

d <- data.frame(x = c(1, 7, 2, 9, 11), y = c(6, 7, 8, 9, 10)) 
splitdf(d) 
## $v 
## [1] 7 9 

## $w 
## x y 
## 1 1 6 
## 3 2 8 
## 5 11 10 




df <- data.frame(x = c(1, 7, 2, 9, 11), z = c(7, 8, 10, 9, 12)) 
splitdf(df) 
## $v 
## [1] 9 

## $w 
## x z 
## 1 1 7 
## 2 7 8 
## 3 2 10 
## 5 11 12 
Смежные вопросы