我有多个包含未知(和可变)列数的数据帧(总是2的倍数)。文件的标题看起来像这样:
X0, Y0, X1, Y1, X2, Y2 ... Xn, Yn
每个配对列包含相同数量的行,但非配对列之间的行数不同。
使用R,我想将这些数据帧切换为仅包含配对列的多个小数据框:
X0, Y0, X1, Y1, X2, Y2,... Xn, Yn
成:
X0, Y0
X1, Y1
X2, Y2
等等。
我尝试设置循环但到目前为止没有成功。
有人能指出我正确的方向/方法来解决这个问题吗?
非常感谢。
答案 0 :(得分:1)
if "$(VisualStudioVersion)" == "12.0" (echo "This command line come from VS 2013!")
if "$(VisualStudioVersion)" == "15.0" (echo "This command line come from VS 2017!")
数据:
lapply(seq(1, ncol(df), by=2), function(i)
df[i: pmin((i+1), ncol(df))])
[[1]]
X0 Y0
1 1 2
2 11 12
3 21 22
4 31 32
5 41 42
[[2]]
X1 Y1
1 3 4
2 13 14
3 23 24
4 33 34
5 43 44
[[3]]
X2 Y2
1 5 6
2 15 16
3 25 26
4 35 36
5 45 46
[[4]]
X3 Y3
1 7 8
2 17 18
3 27 28
4 37 38
5 47 48
[[5]]
X4 Y4
1 9 10
2 19 20
3 29 30
4 39 40
5 49 50
答案 1 :(得分:1)
tidyverse
解决方案:
library(tidyverse)
set.seed(123)
dt<-data.frame(
X0=rnorm(5),
Y0=rnorm(5),
X1=c(rnorm(4),NA),
Y1=c(rnorm(4),NA),
X2=c(rnorm(3),NA,NA),
Y2=c(rnorm(3),NA,NA)
)
dt
X0 Y0 X1 Y1 X2 Y2
1 -0.56047565 1.7150650 1.2240818 -0.5558411 0.7013559 -0.2179749
2 -0.23017749 0.4609162 0.3598138 1.7869131 -0.4727914 -1.0260044
3 1.55870831 -1.2650612 0.4007715 0.4978505 -1.0678237 -0.7288912
4 0.07050839 -0.6868529 0.1106827 -1.9666172 NA NA
5 0.12928774 -0.4456620 NA NA NA NA
seq(2,ncol(dt),2) %>% map(~ select(dt,(.-1):.))
[[1]]
X0 Y0
1 -0.56047565 1.7150650
2 -0.23017749 0.4609162
3 1.55870831 -1.2650612
4 0.07050839 -0.6868529
5 0.12928774 -0.4456620
[[2]]
X1 Y1
1 1.2240818 -0.5558411
2 0.3598138 1.7869131
3 0.4007715 0.4978505
4 0.1106827 -1.9666172
5 NA NA
[[3]]
X2 Y2
1 0.7013559 -0.2179749
2 -0.4727914 -1.0260044
3 -1.0678237 -0.7288912
4 NA NA
5 NA NA
答案 2 :(得分:1)
另一个lapply
解决方案。
# Example data frame
dt <- data.frame(X0 = "a",
Y0 = "b",
X1 = "c",
Y1 = "d",
X2 = "e",
Y2 = "f",
stringsAsFactors = FALSE)
# Split the data frame
lapply(1:(ncol(dt)/2), function(x) dt[, c(2 * x - 1, 2 * x)])
[[1]]
X0 Y0
1 a b
[[2]]
X1 Y1
1 c d
[[3]]
X2 Y2
1 e f