此命令執行特技:
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