0

我想根据其中一个列值拆分我拥有的字符矩阵。因此,例如,如果我有 3 列和“n”行,并且我想使用第 2 列作为参考。该脚本应查看第二列并将所有包含相同值的行分组到一个数据框中。

所以,假设我在第 2 列到“n”行中有“A”、“B”、“C”、“D”和“E”值。我想获得(在这种情况下)5个新数据帧,其中包含以第二列值为条件的所有数据行。因此,矩阵第二列中包含“A”的所有行都转到一个数据框,依此类推。

我的数据要大得多,在我想用作参考的列(上例中的第 2 列)中包含大约 400 个不同的字符值来拆分,所以这个过程需要是自动的,我的意思是,它必须自动检测有多少新的应根据“第 2 列”中不同值的数量创建数据框。

这是我需要的一个较短的示例:

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”,第二个“D”等等。是否可以使用我更大的数据使所有这些过程自动化?

我希望我足够清楚,如果之前已经回答过这个问题,我很抱歉,但我找不到适合我的解决方案。

4

1 回答 1

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的 s 都在一个 s 中list,但是assign如果您想将它们实际拆分为data.frame工作区中的单个 s,您可以使用它来执行操作。

于 2013-08-13T10:30:22.593 回答