3

我有这个数据框:

    Name    Country Gender  Age
1   John      GB      M     25
2   Mark      US      M     35
3   Jane      0       0      0
4   Jane      US      F     30
5   Jane      US      F      0
6   Kate      GB      F     18

如您所见,值“Jane”出现了 3 次。我想要做的是根据变量“名称”对列表进行重复数据删除,但是因为其余列对我很重要,所以我想保留其中包含最多信息的行。例如,如果我要在 excel 中对上述文件进行重复数据删除,它将保留“Jane”的第一个值并删除所有其他值。但是“Jane”的第一个值(第 3 行)在其他列中缺少信息。

因此,换句话说,我想按“名称”对列表进行重复数据删除,但添加一个标准以保留“年龄”列中具有不同于“0”的任何其他值的行。这样我会得到的结果是这样的:

    Name    Country Gender  Age
1   John       GB     M     25
2   Mark       US     M     35
3   Jane       US     F     30
4   Kate       GB     F     18

我试过这个

file3 <- file1[!duplicated(file1$Name),]

但与 excel 一样,它保留“Jane”的值,在其他列中没有可用信息。

如何根据 ZA 顺序中的“年龄”列对行进行排序,以便在对列表进行重复数据删除时,任何具有“0”的内容都将位于底部并被删除?

干杯

大卫

4

2 回答 2

3

试试这个技巧

ind <- with(DF, 
        Country !=0 &
        Gender %in% c('F', 'M') &
        Age !=0)

DF[ind, ]
  Name Country Gender Age
1 John      GB      M  25
2 Mark      US      M  35
4 Jane      US      F  30
6 Kate      GB      F  18

到目前为止,它运行良好并产生您想要的输出

编辑

 library(doBy)
    orderBy(~ -Age+Name, DF) # Sort decreasingly by Age and Name

  Name Country Gender Age
2 Mark      US      M  35
4 Jane      US      F  30
1 John      GB      M  25
6 Kate      GB      F  18
3 Jane       0      0   0
5 Jane      US      F   0

或者简单地使用 Base 函数:

DF[order(DF$Age, DF$Name, decreasing = TRUE), ]
  Name Country Gender Age
2 Mark      US      M  35
4 Jane      US      F  30
1 John      GB      M  25
6 Kate      GB      F  18
3 Jane       0      0   0
5 Jane      US      F   0

现在您可以通过索引满足您条件的正确行来进行选择,我真的认为第一部分比这两个最后更好。

于 2012-11-29T10:33:01.190 回答
1

如果所有重复的行在 column 中的值为零Age,它将适用于subset

# the data
file1 <- read.table(text="Name    Country Gender  Age
1   John      GB      M     25
2   Mark      US      M     35
3   Jane      0       0      0
4   Jane      US      F     30
5   Jane      US      F      0
6   Kate      GB      F     18", header = TRUE, stringsAsFactors = FALSE)

# create a subset of the data
subset(file1, Age > 0)

#   Name Country Gender Age
# 1 John      GB      M  25
# 2 Mark      US      M  35
# 4 Jane      US      F  30
# 6 Kate      GB      F  18
于 2012-11-29T10:50:58.677 回答