R - 取消绑定数据框

R - Unbind Dataframe

我正在尝试将数据帧 (df) 拆分为其构成向量

示例数据框

v1 <- c(213, 225, 435)
v2 <- c(333, 888, 999)
v2 <- c(788, 666, 545)

df <- data.frame(v1, v2, v3)

当前语法:

for (i in 1:3) {
  assign(paste('v', i, sep = '')) <- df$v[c(i)]
}

期望的输出是:

v1、v2、v3

有没有办法使用 lapply 来做到这一点?有没有办法使用 for 循环来做到这一点?

assign 中,我们指定 value 参数和 x(对象名称作为字符串)。 v[c(i)] 也是不正确的,因为 i 是一个数字索引,它试图对不存在的 v 进行子集化。在内部创建列名与 [[ 用于动态子集

相同 paste
for (i in 1:3) {
  assign(paste('v', i, sep = ''), value = df[[paste0("v", i)]])
 }

或者不调用 paste 两次,可以

for(i in 1:3) {
    nm1 <- paste0("v", i)
    assign(nm1, value = df[[nm1]])
}

或者另一种选择是

rm(list = paste0('v', 1:3)) # // remove the objects created in the env
list2env(df, .GlobalEnv)
v1
#[1] 213 225 435
v2
#[1] 788 666 545
v3
#[1] 788 666 545

或者也可以使用attach。最好不要在全局环境中创建多个对象。相反,它可以在 listdata.frame 中(如果对象长度相等)

使用split.default将每一列拆分为不同的数据框。

res <- split.default(df, names(df))
res

#$v1
#   v1
#1 213
#2 225
#3 435

#$v2
#   v2
#1 333
#2 888
#3 999

#$v3
#   v3
#1 788
#2 666
#3 545

如果您需要将它们作为单独的对象,请使用 list2env

list2env(res, .GlobalEnv)