1

我有一个类似于以下示例的 data.frame 。我想在 R 的一个函数中编写一个函数来为我完成这两项任务?x首先提取与and相同的数据框的值,y我想将其保存为数字向量,并将其余部分作为数据框。

    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
4

2 回答 2

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
于 2013-05-23T08:13:22.357 回答
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
于 2013-05-23T08:24:09.870 回答