【问题标题】:Indexing duplicates with respect to certain variables针对某些变量索引重复项
【发布时间】:2018-02-17 05:37:08
【问题描述】:

我想在一个单独的新变量中索引 R 中某些变量的重复项。 假设我有以下数据集:

a <- seq(from=0, to=1, by=.4)
b <- seq(from=0, to=1, by=.4)
c <- seq(from=0, to=1, by=.4)
d <- seq(from=0, to=1, by=.4)

df <- expand.grid(a=a, b=b, c=c, d=d)

> df[1:20,]
     a   b   c d
1  0.0 0.0 0.0 0
2  0.4 0.0 0.0 0
3  0.8 0.0 0.0 0
4  0.0 0.4 0.0 0
5  0.4 0.4 0.0 0
6  0.8 0.4 0.0 0
7  0.0 0.8 0.0 0
8  0.4 0.8 0.0 0
9  0.8 0.8 0.0 0
10 0.0 0.0 0.4 0
11 0.4 0.0 0.4 0
12 0.8 0.0 0.4 0
13 0.0 0.4 0.4 0
14 0.4 0.4 0.4 0
15 0.8 0.4 0.4 0
16 0.0 0.8 0.4 0
17 0.4 0.8 0.4 0
18 0.8 0.8 0.4 0
19 0.0 0.0 0.8 0
20 0.4 0.0 0.8 0

在这种情况下,第一个条目和第十个条目相对于 a 和 b 是相同的。我如何分配一个值,例如“0.00-0.00”为所有具有此组合的列(也是第 19 行)和所有其他组合(例如第 2、11 和 20 行等)的新变量。

提前非常感谢!

【问题讨论】:

    标签: r if-statement indexing duplicates


    【解决方案1】:

    获取重复的行,例如 10th,11th...

    duplicated(df[,c(1,2)])
    

    获取原始行,即。第一,第二...

    duplicated(df[,c(1,2)], fromLast = TRUE)
    

    将范围分配给新列e中的原始和重复项

    df[duplicated(df[,c(1,2)], fromLast = TRUE) | duplicated(df[,c(1,2)]),"e"] <- paste0(df[duplicated(df[,c(1,2)], fromLast = TRUE) | duplicated(df[,c(1,2)]),1],"-",df[duplicated(df[,c(1,2)], fromLast = TRUE) | duplicated(df[,c(1,2)]),2])
    
    > head(df)
        a   b c d       e
    1 0.0 0.0 0 0     0-0
    2 0.4 0.0 0 0   0.4-0
    3 0.8 0.0 0 0   0.8-0
    4 0.0 0.4 0 0   0-0.4
    5 0.4 0.4 0 0 0.4-0.4
    6 0.8 0.4 0 0 0.8-0.4
    

    注意:在本例中,所有行都符合原始/重复条件,因此范围分配给所有

    【讨论】:

      【解决方案2】:

      试试这个

      df$e <- paste(df$a,df$b)
      

      如果您正在寻找其他东西,请告诉我

      【讨论】:

      • 可能用factor 包装它以获取与重复值关联的基础整数。
      • 你能举个例子吗?
      猜你喜欢
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2012-03-28
      • 1970-01-01
      相关资源
      最近更新 更多