【问题标题】:createing sub matrix/dataframe R创建子矩阵/数据框 R
【发布时间】:2016-05-13 13:39:56
【问题描述】:

关于数据框操作的问题。不是硬件,尽管我将其表述为硬件问题。我知道有 3 行方法可以做到这一点,但我似乎找不到。

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

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

(如果不清楚,请进一步澄清)我对 A 执行了操作,将结果(真或假)存储在列数据框中(当然长度相同) ),现在希望将其提取到自己的矩阵中。
新矩阵的大小为 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

【问题讨论】:

  • 最好包含可重现的示例 (dput) 和预期输出,以便其他人更容易帮助您。
  • 查看以下链接以创建reproducible example
  • 感谢您的意见。我阅读了 Sotos 的建议并制作了这个。够了吗?我认为这很清楚,但显然我会这么认为。如果提供的示例没有说明问题,请告诉我。

标签: r dataframe submatrix


【解决方案1】:

为什么不简单

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,]

给予

> 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

OP 编辑​​后编辑

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

给予

> C
  name State metric1 metric2
1  Joe    MA      23      25
3   Bo    CA     938     387

【讨论】:

  • 如果你不喜欢行 ID,你可以随时通过rownames(C) &lt;- 1:nrow(C)将它们重置为连续的
  • 是的,这正是我要找的东西。感谢您的帮助和时间!
【解决方案2】:

替代使用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]

【讨论】:

    猜你喜欢
    • 2021-10-13
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多