我有一个包含两列的数据框 - 一个组号和一个名称:
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的组?
答案 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