按行子集数据框,取决于 R 中的列号
Subsetting a data frame by rows, dependent on the column number in R
我想根据数据所在的列,根据不同的行数对 R 中的数据框进行子集化。例如,我们从这个数据框开始:
df <- data.frame(t1 = c(1:6), t2 = c(4:9), t3 = (7:12), t4 = c(12:17), t5 = c(18:23))
df
t1 t2 t3 t4 t5
1 1 4 7 12 18
2 2 5 8 13 19
3 3 6 9 14 20
4 4 7 10 15 21
5 5 8 11 16 22
6 6 9 12 17 23
现在,我想通过为列 t1 捕获行 5:6、为列 t2 捕获行 4:5、为列 t3 捕获行 3:4 等来对数据框进行子集化。 (例如,对于我们输出的每一列,高 1 行的 2 个数据点集)以便新的数据帧看起来像这样:
df2
t1 t2 t3 t4 t5
1 5 7 9 13 18
2 6 8 10 14 19
我的实际工作问题最多可以有 50 列,所以我希望能够使用一个我确信已经存在的干净、简单的函数。
提前致谢。
您可以使用sapply
,例如:
df <- data.frame(t1 = c(1:6), t2 = c(4:9), t3 = (7:12), t4 = c(12:17), t5 = c(18:23))
m <-sapply(1:ncol(df), function(i){
df[(6-i):(7-i),i]
})
df2 <- data.frame(m)
colnames(df2) <- colnames(df)
你可以试试
n <- nrow(df)
s1 <- 1:ncol(df)
df2 <- as.data.frame(matrix(df[cbind(c(n-1, n) - rep((s1-1), each=2),
rep(s1,each=2))],ncol=ncol(df), dimnames=list(NULL, names(df))))
df2
# t1 t2 t3 t4 t5
#1 5 7 9 13 18
#2 6 8 10 14 19
我想根据数据所在的列,根据不同的行数对 R 中的数据框进行子集化。例如,我们从这个数据框开始:
df <- data.frame(t1 = c(1:6), t2 = c(4:9), t3 = (7:12), t4 = c(12:17), t5 = c(18:23))
df
t1 t2 t3 t4 t5
1 1 4 7 12 18
2 2 5 8 13 19
3 3 6 9 14 20
4 4 7 10 15 21
5 5 8 11 16 22
6 6 9 12 17 23
现在,我想通过为列 t1 捕获行 5:6、为列 t2 捕获行 4:5、为列 t3 捕获行 3:4 等来对数据框进行子集化。 (例如,对于我们输出的每一列,高 1 行的 2 个数据点集)以便新的数据帧看起来像这样:
df2
t1 t2 t3 t4 t5
1 5 7 9 13 18
2 6 8 10 14 19
我的实际工作问题最多可以有 50 列,所以我希望能够使用一个我确信已经存在的干净、简单的函数。
提前致谢。
您可以使用sapply
,例如:
df <- data.frame(t1 = c(1:6), t2 = c(4:9), t3 = (7:12), t4 = c(12:17), t5 = c(18:23))
m <-sapply(1:ncol(df), function(i){
df[(6-i):(7-i),i]
})
df2 <- data.frame(m)
colnames(df2) <- colnames(df)
你可以试试
n <- nrow(df)
s1 <- 1:ncol(df)
df2 <- as.data.frame(matrix(df[cbind(c(n-1, n) - rep((s1-1), each=2),
rep(s1,each=2))],ncol=ncol(df), dimnames=list(NULL, names(df))))
df2
# t1 t2 t3 t4 t5
#1 5 7 9 13 18
#2 6 8 10 14 19