创建子矩阵/数据帧R.

时间:2016-05-13 13:39:56

标签: r dataframe submatrix

关于数据帧操作的问题。不是HW,虽然我会把它称为硬件问题。我知道有三种方式可以做到这一点,但我似乎无法找到它。

问题
我有一个数据框 A ,有10列和一千行,它充满了一些数据。我有一个1列矩阵 B 有1列和1000行,它由1和0填充(TRUE或FALSE)。

目标:创建一个新的数据框 C ,其中仅包含 A 中矩阵 C 的等效索引中具有TRUE值的行。

(如果不清楚则更加明确)我在 A 上执行操作,将结果(true或false)存储在列数据框中(当然长度相同) )现在希望将其提取到自己的矩阵中 新矩阵的大小是sum(B)X 10(只是逻辑演绎)

感谢您的阅读!感谢您的帮助。

示例

数据框A

Name   State   metric1 metric2

Joe     MA      23       25
Moe     AZ      123      2971
Bo      CA      938      387
Yo      UT       1        3

矩阵B

1
0
1
0

所需输出(数据帧C

Name   State   metric1 metric2

Joe     MA      23       25
Bo      CA      938      387

2 个答案:

答案 0 :(得分:1)

为什么不简单

.img {
    position: relative;
    float: left;
    width:  100px;
    height: 100px;
    background-position: 50% 50%;
    background-repeat:   no-repeat;
    background-size:     cover;
}

<div class="img" style="background-mage:url('http://i.imgur.com/tI5jq2c.jpg');"></div>
<div class="img" style="background-mage:url('http://i.imgur.com/37w80TG.jpg');"></div>
<div class="img" style="background-mage:url('http://i.imgur.com/B1MCOtx.jpg');"></div>

A <- data.frame(cbind(A=1:10,B=21:30,C=41:50))
B <- data.frame(D=rep(c(TRUE,FALSE),5))
C <- A[B$D,]

OP编辑后编辑

> A
    A  B  C
1   1 21 41
2   2 22 42
3   3 23 43
4   4 24 44
5   5 25 45
6   6 26 46
7   7 27 47
8   8 28 48
9   9 29 49
10 10 30 50
> B
       D
1   TRUE
2  FALSE
3   TRUE
4  FALSE
5   TRUE
6  FALSE
7   TRUE
8  FALSE
9   TRUE
10 FALSE
> C
  A  B  C
1 1 21 41
3 3 23 43
5 5 25 45
7 7 27 47
9 9 29 49

A <- data.frame(cbind(name=c("Joe",  "Moe",   "Bo" ,  "Yo"),
                      State=c("MA","AZ","CA","UT"),
                      metric1 = c(23,123,938,1),
                      metric2 = c(25,2971,387,3)))
B <- c(1,0,1,0)
C <- A[B==1,]
C

答案 1 :(得分:1)

替代使用data.table

library(data.table)

# convert you dataset into a data.table
  setDT(A)

# create a dummy variable (TRUE or FALSE) using operations other columns
  A[ , logical := sum(metric1, metric1) > 50 ]

# subset the data 
  A[ logical == T]