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
。最好不要在全局环境中创建多个对象。相反,它可以在 list
或 data.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)
我正在尝试将数据帧 (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
。最好不要在全局环境中创建多个对象。相反,它可以在 list
或 data.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)