R:将值从其他行值指定的行值追加到列表中

时间:2015-06-13 23:03:47

标签: r

我有一个包含两列的数据框 - 一个组号和一个名称:

Group    Name
1        A
4        B
2        C
3        D
4        E

我现在想要制作一个包含所有具有共同组的名称的列表。

我试过这个for循环:

myfun <- function(x,g1,g2,g3,g4){
    for (j in 1:nrow(x)){
        if (x[1,j] == 1){
            list(g1, list(c=x[2,j]))
        } else if (x[1,j] == 2){
            list(g2, list(c=x[2,j]))
        } else if (x[1,j] == 3){
            list(g3, list(c=x[2,j]))
        } else if (x[1,j] == 4){
            list(g4, list(c=x[2,j]))
        }               
    } 

}

其中g1,g2,g3和g4是空列表。 我收到此错误Error in if (x[1, i] == 1) { : argument is of length zero。 我有正确的方法吗?

编辑: 如何通过列表中的值搜索和提取级别(假设我想要名称为B的组?

1 个答案:

答案 0 :(得分:1)

您可以使用public class Method { public string name { get; set; } public Dictionary<string,MethodItem> items { get; set; } } public class MethodItem { public string name { get; set; } public string value { get; set; } } 函数简化代码(避免所有循环)(apply是数据)

dat

这将创建一个列表,其中列表的索引对应于res <- lapply(unique(dat$Group), function(g) unique(dat[dat$Group==g, "Name"])) names(res) <- unique(dat$Group) res[["4"]] # [1] B E # Levels: A B C D E ,并且每个元素都包含该组中唯一的&#34; Name&#34 ;.

另一种解决方案,使用unique(dat$Group)

plyr