【问题标题】:subset dataframe by removing duplicates for each level of a factor通过删除因子的每个级别的重复项来子集数据帧
【发布时间】:2017-11-26 03:49:09
【问题描述】:

我有一个数据框:

df<- data.frame(region= c("1", "1", "1","1","1","1","1","1","2","2"),
            plot=c("1", "1", "1","2","2","2", "3","3","3","3"),
            interact=c("A_B", "C_D","C_D", "E_F","C_D","C_D", "D_E", 
            "D_E","C_B","A_B"))

我想计算每个绘图子集的 interact 的所有唯一级别。最终的数据框如下所示:

 result<- 
     Plot    freq
      1      2
      2      2
      3      3

我想使用 dplyr 并且已经做到了这一点:

 df2 <-df %>% group_by(plot) %>%mutate(freq=length(unique((interact))))

但使用上面的代码,我还没有想出一种方法,每个图只表示一个值(即,删除每个唯一图的 freq 中的重复值)。

【问题讨论】:

  • 您需要summarize 而不是mutatedf %&gt;% group_by(plot) %&gt;%summarise(freq = n_distinct(interact))
  • 在基础 R 中,您可以为 data.frame 执行 aggregate(interact ~ plot, data = df, function(x) length(unique(x))) 或为命名向量执行 rowSums(table(df$plot, df$interact) &gt; 0)

标签: r


【解决方案1】:

试试这个。

df%>%group_by(plot)%>%summarise(n=length(unique(interact)))

    plot     n
1      1     2
2      2     2
3      3     3

或以您自己的方式为基础。

df2 <-df %>% group_by(plot) %>%mutate(freq=length(unique((interact))))
df2=df2[!duplicated(df2$plot),]

  region   plot interact  freq
  <fctr> <fctr>   <fctr> <int>
1      1      1      A_B     2
2      1      2      E_F     2
3      1      3      D_E     3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-16
    • 2013-10-29
    • 1970-01-01
    • 2012-06-23
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    相关资源
    最近更新 更多