我想根据其中一个列值拆分我拥有的字符矩阵。 所以,如果我有3列和" n"行,我想使用第2列作为参考。该脚本应查看第二列,并将包含相同值的所有行分组到数据框中。
所以,说我有" A"," B"," C"," D"和" E"第2栏至第34栏中的值" n"行。我希望得到(在这种情况下)5个新数据帧,其中包含以第二列值为条件的所有数据行。所以包含" A"的所有行在矩阵的第二列中转到一个数据帧,依此类推。
我的数据要大得多,包含我想用作参考的列中的大约400个不同的字符值(上例中的第2列)要拆分,所以这个过程需要是自动的,我的意思是,它必须自动检测应根据"第2列和第34列中不同值的数量创建多少个新数据帧。
以下是我需要的一个较短的例子:
structure(c("Hi", "Med", "Hi", "Low", "A", "D", "A", "C", "8",
"3", "9", "9", "1", "1", "1", "2"), .Dim = c(4L, 4L), .Dimnames = list(
NULL, c("b", "x", "y", "z")))
如果我使用(再次)第2列(" x")作为参考,我需要有3个新的数据帧。一个数据帧包含行1和3,另一个数据帧包含行2,最后一个包含行4,因为该列中有3个不同的值:" A"," D"和" C"。
新数据框应自动命名为它们被分组的值。因此,第一个数据帧应命名为" A",第二个数据帧应命名为#34; D"等等。是否可以使用更大的数据自动完成所有这些过程?
我希望我已经足够清楚了,如果以前已经回答过这个问题我很抱歉,但我找不到适用于我的解决方案。
答案 0 :(得分:2)
听到它的声音,你正在寻找split
功能。
x <- structure(c("Hi", "Med", "Hi", "Low",
"A", "D", "A", "C",
"8", "3", "9", "9",
"1", "1", "1", "2"),
.Dim = c(4L, 4L),
.Dimnames = list(NULL, c("b", "x", "y", "z")))
split(data.frame(x), x[, 2])
# $A
# b x y z
# 1 Hi A 8 1
# 3 Hi A 9 1
#
# $C
# b x y z
# 4 Low C 9 2
#
# $D
# b x y z
# 2 Med D 3 1
生成的data.frame
只在一个list
中,但是如果您想将它们实际拆分为单个assign
,则可以使用data.frame
执行操作工作区。