【问题标题】:Counting the times a value in a vector is different per combination of 4 other vectors根据 4 个其他向量的组合计算向量中的值不同的次数
【发布时间】:2015-11-05 16:33:15
【问题描述】:

这是我的数据框的样子:

a <- c(1,1,4,4,5)
b <- c(1,2,3,3,5)
c <- c(1,4,4,4,5)
d <- c(2,2,4,4,5)
e <- c(1,5,3,2,5)

df <- data.frame(a,b,c,d,e)

我想写一些东西来返回向量 a、b、c、d 的所有唯一实例,这些实例在向量 e 中具有不同的值。

例如:

  a b c d e 
1 1 1 1 2 1 
2 1 2 4 2 5 
3 4 3 4 4 3 
4 4 3 4 4 2 
5 5 5 5 5 5 

第 3 行和第 4 行在向量 d 之前完全相同(具有 4344 的组合),因此应该只返回其中的一个实例,但它们在向量 e 中有 2 个不同的值。我想对这些进行计数-因此 4344 的组合在向量 e 中有 2 个不同的值。

预期的输出会告诉我某个组合(例如 4344)在向量 e 中有多少次不同的值。所以在这种情况下,它会是这样的:

a b c d   e
4 3 4 4   2

到目前为止,我有这样的事情:

library(tidyr)
library(dplyr)

df %>%
  unite(key_abcd, a, b, c, d) %>%
  count(key_abcd, e)

但这将计算每个 a、b、c、d 组合重复 e 的次数。我想计算每个 a、b、c、d 组合的 e 不同的次数。

注意:向量 a、b、c、d 中的值的重复组合和向量 e 中的重复值。对于 a、b、c、d 的唯一组合,我只想返回 e 中唯一值的计数。

【问题讨论】:

  • 有。我的另一个问题要求 e 中的重复值,这个问题要求 e 中的不同值。也许您应该在将帖子标记为重复之前更好地阅读问题的标题。
  • @RichardScriven - 注意两个问题中的数据框有何不同。在第一个问题中,组合 4344 在 e“3”和“3”中有 2 个相同的值。在此数据帧中,组合 4344 在 e、“2”和“3”中有 2 个不同的值。在我的情况下,e 中的重复值和不同值都意味着我想分析的完全不同的东西。你帮不上什么忙

标签: r


【解决方案1】:

您可以尝试在以下位置添加一点dplyr

library(dplyr)

df %>%
  unite(key_abcd, a, b, c, d) %>%
  group_by(key_abcd) %>%
  summarise(e = n()) %>%
  filter(e>1)

【讨论】:

  • 刚刚执行了查询!同时,一个小问题:我在问题中没有提到的是向量a,b,c,d中的值组合有一些重复记录。对于向量 a、b、c、d 中值的不同组合,您会添加什么来仅获取向量 e 中不同值的计数?
  • 也许df %&gt;% distinct %&gt;% count(a, b, c, d) %&gt;% filter(n &gt; 1) ?
  • 对于 a,b,c,d 中的每个唯一值组合,向量 e 中也有重复值。对于 a、b、c、d 的每个唯一组合,我如何才能仅获取 e 中唯一值的计数?
  • 嗨,jeremycg。那么您知道如何避免从向量 abcd 中获取重复项以及向量 e 对应于 abcd 中的每个组合的重复项吗?
  • 我认为这可以完成工作,但不确定:df %&gt;% unite(key_abcd, a, b, c, d) %&gt;% group_by(key_abcd) %&gt;% summarise(e = n_distinct(e)) %&gt;% filter(e&gt;1)
猜你喜欢
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多