使用自定义名称在 R 中创建动态数据框 [英] Dynamic data frame creation in R with custom names

查看:38
本文介绍了使用自定义名称在 R 中创建动态数据框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想动态创建数据框并为其分配自定义名称.

I'd like to create data frames dynamically and assign custom names to it.

我有一个这样的主数据集:

I have a master data set like this:

ID    grp    val1    val2
1      a      32       9
1      b      21       31
1      c      43       76
2      a      23       67
2      b      5        45
2      c      65       76
3      a      43       34
3      b      43       7
3      c      12       87
4      a      43       35
4      b      65       87
4      c      21       55

我想创建像

data1:
ID    grp    val1    val2
1      a      32       9
1      b      21      31
1      c      43      76

data2:
ID    grp    val1    val2
2      a      23       67
2      b      5        45
2      c      65       76

等等...

我尝试过一些类似的事情:

I have tried some things like:

myID<-1:4
df <- paste('data',myID, sep ='')
ll <- sapply(df, function(x)
{
  data.frame ()
  df<-masterData[which(masterData$ID==myID),]
})

没有预期结果的另一次尝试:

Another try without desired results:

sapply(myID,function(x) df<-as.data.frame(masterData[which(masterData$ID==myID,]))

我猜子集不会对多个值这样做:

I guess subset will not do it for multiple values:

myframes<-list(subset(masterData,masterData$ID==myID))

推荐答案

我只想使用 split 并将它们全部保存在 list 中:

I would just use split and keep them all in a list:

split(masterData, masterData$ID)
# $`1`
#   ID grp val1 val2
# 1  1   a   32    9
# 2  1   b   21   31
# 3  1   c   43   76
# 
# $`2`
#   ID grp val1 val2
# 4  2   a   23   67
# 5  2   b    5   45
# 6  2   c   65   76
# 
# $`3`
#   ID grp val1 val2
# 7  3   a   43   34
# 8  3   b   43    7
# 9  3   c   12   87
# 
# $`4`
#    ID grp val1 val2
# 10  4   a   43   35
# 11  4   b   65   87
# 12  4   c   21   55

如果你真的想用大量的 data.frame 在你的工作场所乱扔垃圾,而不是把所有东西都放在一个整洁的 list 中,你可以使用 list2env:

If you really want to litter your workplace with lots of data.frames, instead of keeping everything in a tidy list, you can use list2env:

X <- split(masterData, masterData$ID)
names(X) <- paste0("data", names(X))
list2env(X, envir=.GlobalEnv)
# <environment: R_GlobalEnv>

ls(pattern = "^data[0-9]$")             ## What did that create?
# [1] "data1" "data2" "data3" "data4"
data1
#   ID grp val1 val2
# 1  1   a   32    9
# 2  1   b   21   31
# 3  1   c   43   76

这篇关于使用自定义名称在 R 中创建动态数据框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆