2013-03-28 49 views
0

我有这个数据帧。我希望把每一个独特的部门,并把相应的名称下,每一个独特的系正如你可以看到有多个系例如,最终dcoument应该是这样的:处理R数据帧

Internet 
    Public-Web 
    Intranet 
BackOffice 
    Batch 
    BackEnd 
BackEnd 
    WebLogic 
    Oracle 

dput(x)的

structure(list(ID = c(1234L, 2345L, 6789L, 3456L, 7890L, 1987L 
), Name = structure(c(5L, 3L, 2L, 1L, 6L, 4L), .Label = c("BackEnd", 
"Batch", "Intranet", "Oracle", "Public-Web", "WebLogic"), class = "factor"), 
    Dept = structure(c(3L, 3L, 2L, 2L, 1L, 1L), .Label = c("BackEnd", 
    "BackOffice", "Internet"), class = "factor")), .Names = c("ID", 
"Name", "Dept"), class = "data.frame", row.names = c(NA, -6L)) 

任何想法,我会如何做到这一点在R?

回答

1

我假设你可能有重复的,因此使用unique

for(dept in unique(x$Dept)){ 
    print(dept) 
    x2 <- subset(x,subset=Dept==dept) 
    for(name in unique(x2$Name)){ 
    print(paste(sep=""," ",name)) 
    } 
} 

用你需要的替换print

1

您可以使用split来实现这一目标:

split(as.character(df$Name), df$Dept) 

# $BackEnd 
# [1] "WebLogic" "Oracle" 
# 
# $BackOffice 
# [1] "Batch" "BackEnd" 
# 
# $Internet 
# [1] "Public-Web" "Intranet" 

如果你想要独一无二的条目,那么就这样做:

df <- unique(df[, 2:3]) 
split(as.character(df$Name), df$Dept) 
+0

我需要使用两个for循环。对于每个独特的部门,我需要列出名称。我将在第二个循环的Name下进行更多的处理。 – user1471980

+1

我不明白你的评论。阿伦答案比两个循环要快得多。 –

+0

我想他只是不知道如何迭代'拆分' –