您可以使用split
,这将创建list
您感兴趣的值:
with(mydf[mydf$Set == "A", ], split(value, variable))
# $All
# [1] 24.40030 21.25820 1.91043
#
# $Part
# [1] 24.4003 21.2582
在这里,我不是拆分整个数据集,而是拆分 where 的值Set == "A"
,正如您在当前解决方案中所需要的那样。
或者,如果您想一次性根据“Set”和“variable”的所有因素进行拆分:
with(mydf, split(value, list(Set, variable)))
# $A.All
# [1] 24.40030 21.25820 1.91043
#
# $B.All
# [1] 34.9642 33.7940 16.6093 16.6095
#
# $A.Part
# [1] 24.4003 21.2582
#
# $B.Part
# [1] 34.9642 33.7940 16.6093
我建议坚持使用list
,就像我在上面创建的那样。但是,如果您真的想在工作区中拥有一大堆对象,您可以使用list2env
将列表项提取到您的环境中:
## I currently only have the original data.frame
ls()
# [1] "mydf"
list2env(with(mydf, split(value, list(Set, variable))), envir=.GlobalEnv)
# <environment: R_GlobalEnv>
ls()
# [1] "A.All" "A.Part" "B.All" "B.Part" "mydf"
A.All
# [1] 24.40030 21.25820 1.91043
A.Part
# [1] 24.4003 21.2582
B.All
# [1] 34.9642 33.7940 16.6093 16.6095
B.Part
# [1] 34.9642 33.7940 16.6093