【问题标题】:splitting a data into several parts将数据分成几个部分
【发布时间】:2016-12-12 07:54:24
【问题描述】:

我的数据在下面,我想根据 ID 将其拆分为几个部分

df1<- structure(list(Ids1 = 1:7, string1 = structure(c(3L, 2L, 4L, 
1L, 1L, 1L, 1L), .Label = c("gdyijq,udyhfs,gqdtr", "hdydg", "hishsgd,gugddf", 
"ydis"), class = "factor"), Ids2 = c(1L, 3L, 4L, 9L, 10L, NA, 
NA), string2 = structure(c(4L, 6L, 2L, 3L, 5L, 1L, 1L), .Label = c("", 
"gdyijq,udyhfs", "gqdtr", "hishsgd,gugddf", "nlrshf", "ydis"), class = "factor")), .Names = c("Ids1", 
"string1", "Ids2", "string2"), class = "data.frame", row.names = c(NA, 
-7L))

当我只保留那些具有相似 ID 并计算有多少 string1 与 string2 相似(它们用逗号分隔)时,我想制作第一个 df.1。

Ids1    string1         ids2    string2          Similar 
1   hishsgd,gugddf       1      hishsgd,gugddf     2
3   ydis                 3       ydis              1
4   gdyijq,udyhfs,gqdtr  4       gdyijq,udyhfs     2

我这样做

df.1 <- df1[which(df1$Ids1 == df1$Ids2), ]

它只给了我第一行,没有别的

然后我想要那些只有 ids 1 而在 ids2 中不存在的那些

Ids1    string1
2       hdydg
5       gdyijq,udyhfs,gqdtr
6       gdyijq,udyhfs,gqdtr
7       gdyijq,udyhfs,gqdtr

我这样做但也不起作用

df.2<- df1[which(df1$Ids1 != df1$Ids2), ]

最后我想保留那些只在 ids2 而不是 ids1 的人

Ids1    string1
9       gqdtr
10      nlrshf

我这样做但也不起作用

df.3<- df1[which(df1$Ids2 != df1$Ids1), ]

【问题讨论】:

    标签: r


    【解决方案1】:

    这是我可以根据使用 dplyr 包的连接提出的一种解决方案:

    library(dplyr)
    
    df.1 <- inner_join(select(df1, Ids1, string1), select(df1, Ids2, string2), by = c('Ids1' = 'Ids2'))
    df.1$Similar <- apply(df.1[, -1], 1, function(x) sum(unlist(strsplit(x[1], ',')) %in% unlist(strsplit(x[2], ','))))
    
    df.2 <- anti_join(select(df1, Ids1, string1), select(df1, Ids2, string2), by = c('Ids1' = 'Ids2'))
    df.3 <- anti_join(select(df1, Ids2, string2), select(df1, Ids1, string1), by = c('Ids2' = 'Ids1'))
    df.3 <- df.3[complete.cases(df.3), ]
    

    您还可以对 df.2 和 df.3 执行不同的操作,如下所示:

    df.2 <- df1[!df1$Ids1 %in% df1$Ids2, c('Ids1', 'string1')]
    df.3 <- df1[!df1$Ids2 %in% df1$Ids1, c('Ids2', 'string2')]
    df.3 <- df.3[complete.cases(df.3), ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      • 2022-01-19
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多