如何从多个 data.frame 中抓取特定列并将其另存为 R 中的新 data.frame?
how to grab specific columns from multiple data.frame and save it as a new data.frame in R?
我有以下示例 data.frame
,其中包含多个变量(即 A、B、C)。
set.seed(123)
D1 <- data.frame(Date = seq(as.Date("2001-01-01"), to= as.Date("2001-01-10"), by="day"),
A = runif(10,1,5),
B = runif(10,3,6),
C = runif(10,2,5))
D2 <- data.frame(Date = seq(as.Date("2001-01-01"), to= as.Date("2001-01-10"), by="day"),
A = runif(10,1,5),
B = runif(10,3,6),
C = runif(10,2,5))
D3 <- data.frame(Date = seq(as.Date("2001-01-01"), to= as.Date("2001-01-10"), by="day"),
A = runif(10,1,5),
B = runif(10,3,6),
C = runif(10,2,5))
目标
我想从所有 data.frame
中获取每个变量并将其保存为新的 data.frame
,名称设置为 Variable
,列名设置为 data.frame+variable
如下所示
A <- data.frame(Date, D1A,D2A,D3A)
B <- data.frame(Date,D1B,D2B,D3B)
C <- data.frame(Date,D1C,D2C,D3C)
如有任何帮助,我将不胜感激。
我们在 list
中获取数据集(没有第一列 'Date'),transpose
,然后用 map
遍历 list
,在每个数据集中绑定 'Date' 列(最好将其保留为 list
,但如果需要,请使用 list2env
在全局环境中创建对象)
library(dplyr)
library(purrr)
list(D1 = D1[-1], D2 = D2[-1], D3 = D3[-1]) %>%
transpose %>%
map(~ bind_cols(D1['Date'], .)) %>%
list2env(.GlobalEnv)
-检查创建的对象A、B、C
head(A, 2)
# Date D1 D2 D3
#1 2001-01-01 2.150310 4.852097 3.660461
#2 2001-01-02 4.153221 4.609196 1.379363
head(B, 2)
# Date D1 D2 D3
#1 2001-01-01 5.870500 3.428400 5.263425
#2 2001-01-02 4.360002 4.243639 4.887663
head(C, 2)
# Date D1 D2 D3
#1 2001-01-01 4.668618 2.137494 2.730858
#2 2001-01-02 4.078410 3.326600 4.004167
这是一个基本的 R 选项
lst <- mget(ls(pattern = "^D\d+"))
list2env(
sapply(
names(lst[[1]])[-1],
function(x) {
cbind(
lst[[1]]["Date"],
list2DF(lapply(lst, `[[`, x))
)
},
USE.NAMES = TRUE,
simplify = FALSE
),
envir = .GlobalEnv
)
我有以下示例 data.frame
,其中包含多个变量(即 A、B、C)。
set.seed(123)
D1 <- data.frame(Date = seq(as.Date("2001-01-01"), to= as.Date("2001-01-10"), by="day"),
A = runif(10,1,5),
B = runif(10,3,6),
C = runif(10,2,5))
D2 <- data.frame(Date = seq(as.Date("2001-01-01"), to= as.Date("2001-01-10"), by="day"),
A = runif(10,1,5),
B = runif(10,3,6),
C = runif(10,2,5))
D3 <- data.frame(Date = seq(as.Date("2001-01-01"), to= as.Date("2001-01-10"), by="day"),
A = runif(10,1,5),
B = runif(10,3,6),
C = runif(10,2,5))
目标
我想从所有 data.frame
中获取每个变量并将其保存为新的 data.frame
,名称设置为 Variable
,列名设置为 data.frame+variable
如下所示
A <- data.frame(Date, D1A,D2A,D3A)
B <- data.frame(Date,D1B,D2B,D3B)
C <- data.frame(Date,D1C,D2C,D3C)
如有任何帮助,我将不胜感激。
我们在 list
中获取数据集(没有第一列 'Date'),transpose
,然后用 map
遍历 list
,在每个数据集中绑定 'Date' 列(最好将其保留为 list
,但如果需要,请使用 list2env
在全局环境中创建对象)
library(dplyr)
library(purrr)
list(D1 = D1[-1], D2 = D2[-1], D3 = D3[-1]) %>%
transpose %>%
map(~ bind_cols(D1['Date'], .)) %>%
list2env(.GlobalEnv)
-检查创建的对象A、B、C
head(A, 2)
# Date D1 D2 D3
#1 2001-01-01 2.150310 4.852097 3.660461
#2 2001-01-02 4.153221 4.609196 1.379363
head(B, 2)
# Date D1 D2 D3
#1 2001-01-01 5.870500 3.428400 5.263425
#2 2001-01-02 4.360002 4.243639 4.887663
head(C, 2)
# Date D1 D2 D3
#1 2001-01-01 4.668618 2.137494 2.730858
#2 2001-01-02 4.078410 3.326600 4.004167
这是一个基本的 R 选项
lst <- mget(ls(pattern = "^D\d+"))
list2env(
sapply(
names(lst[[1]])[-1],
function(x) {
cbind(
lst[[1]]["Date"],
list2DF(lapply(lst, `[[`, x))
)
},
USE.NAMES = TRUE,
simplify = FALSE
),
envir = .GlobalEnv
)