我想动态创建数据框并为其指定自定义名称。
我有一个这样的主数据集:
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
依旧......
我尝试了一些类似的事情:
myID<-1:4
df <- paste('data',myID, sep ='')
ll <- sapply(df, function(x)
{
data.frame ()
df<-masterData[which(masterData$ID==myID),]
})
另一种没有预期结果的尝试:
sapply(myID,function(x) df<-as.data.frame(masterData[which(masterData$ID==myID,]))
我猜子集不会为多个值执行此操作:
myframes<-list(subset(masterData,masterData$ID==myID))
答案 0 :(得分:3)
我只会使用split
并将其全部保存在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
s的情况下乱丢你的工作场所,而不是让所有东西保持整洁list
,你可以使用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
答案 1 :(得分:0)
答案 2 :(得分:0)
另一个答案是使用plyr
的{{1}}函数
dlply