创建子 [=10R
createing sub matrix/dataframe R
关于数据帧操作的问题。不是硬件,尽管我将其表述为硬件问题。我知道有一种 3 行方式可以做到这一点,但我似乎找不到它。
问题
我有一个包含 10 列和 1000 行的数据框 A,其中填充了一些数据。我有一个包含 1 列和 1000 行的 1 列矩阵 B,它由 1 和 0(TRUE 或 FALSE)填充。
目标:创建一个新的数据框 C,它只包含 A 中在矩阵的等效索引中具有 TRUE 值的行C。
(如果不清楚,请进一步说明) 我对 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
为什么不干脆
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
替代使用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]
关于数据帧操作的问题。不是硬件,尽管我将其表述为硬件问题。我知道有一种 3 行方式可以做到这一点,但我似乎找不到它。
问题
我有一个包含 10 列和 1000 行的数据框 A,其中填充了一些数据。我有一个包含 1 列和 1000 行的 1 列矩阵 B,它由 1 和 0(TRUE 或 FALSE)填充。
目标:创建一个新的数据框 C,它只包含 A 中在矩阵的等效索引中具有 TRUE 值的行C。
(如果不清楚,请进一步说明) 我对 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
为什么不干脆
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
替代使用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]