此命令执行特技:
as.data.frame(t(mapply(function(x,y,z) df[x,y:z],
x=seq_len(nrow(df)),y=left,z=right)))
下面是一个例子:
set.seed(10)
df <- data.frame(replicate(8,runif(4)))
# X1 X2 X3 X4 X5 X6 X7 X8
# 0.51 0.09 0.62 0.11 0.05 0.86 0.41 0.77
# 0.31 0.23 0.43 0.60 0.26 0.62 0.71 0.36
# 0.43 0.28 0.65 0.36 0.40 0.78 0.84 0.54
# 0.69 0.27 0.57 0.43 0.84 0.36 0.24 0.09
应用
left <- c(1,3,5,7)
right <- c(2,4,6,8)
as.data.frame(t(mapply(function(x,y,z) df[x,y:z],
x=seq_len(nrow(df)),y=left,z=right)))
产生
# X1 X2
# 0.51 0.09
# 0.43 0.60
# 0.40 0.78
# 0.24 0.09
为了达到上述目的,由left
和right
定义的每个范围必须包含相同数量的元素。此外,left
和right
必须包含与df
中的行一样多的元素。
完全根据您的描述很难说出您要达到的目标。你可以提供一个简单的例子* *之前的*和*之后的数据*? ....特别是,你想要得到的结果并不清楚:矩阵,向量列表,数据帧,其他东西? – Jealie
假设我有一个数据帧df <-as.data.frame(matrix(seq(10),nrow = 2,byrow = TRUE); left <-c(2,4); right <-c(3,5 );我想获得一个数据框,使得:subset <-rbind(as.numeric(a [1,left [1]:right [1]]),as.numeric(a [2,left [2]:对[2]])) – user1614062