【问题标题】:R cast can't deal with unique rowsR cast 不能处理唯一的行
【发布时间】:2017-11-23 16:08:19
【问题描述】:

问题


我有cluster.id 并且对应于这些cluster.id 我在每个集群中找到了不同的letters(作为简化)。

我对通常在不同的集群上一起找到哪些字母感兴趣(我使用了来自此 answer 的代码),但是我对找到每个字母的比例不感兴趣,所以我想删除重复的行(请参阅下面的代码)。

这看起来很有效(没有错误),但是转换矩阵填充了'NA' 和字符串而不是所需的计数(我在下面的代码 cmets 中进一步解释了所有内容)。

任何建议如何解决这个问题,或者这只是过滤唯一行后不可能的事情?

代码


test.set <- read.table(text = "
                            cluster.id   letters
                       1          4       A
                       2          4       B
                       3          4       B
                       4          3       A
                       5          3       E
                       6          3       D
                       7          3       C
                       8          2       A
                       9          2       E
                       10          1       A", header = T, stringsAsFactors = F)



# remove irrelevant clusters (clusters which only contain 1 letter)
test.set <- test.set %>% group_by( cluster.id ) %>%
  mutate(n.letters = n_distinct(letters)) %>%
  filter(n.letters > 1) %>%
  ungroup() %>%
  select( -n.letters)

test.set
#  cluster.id letters
#<int>   <chr>
#1          4       A
#2          4       B
#3          4       B
#4          3       A
#5          3       E
#6          3       D
#7          3       C
#8          2       A
#9          2       E



# I dont want duplicated rows becasue they are misleading.
# I'm only interested in which letters are found togheter in a 
# cluster not in what proportions
# Therefore I want to remove these duplicated rows

test.set.unique <- test.set %>% unique()
matrix <- acast(test.set.unique, cluster.id ~ letters)

matrix
#  A   B   C   D   E  
#2 "A" NA  NA  NA  "E"
#3 "A" NA  "C" "D" "E"
#4 "A" "B" NA  NA  NA 


# This matrix contains NA values and letters intead of the counts I wanted.
# However using the matrix before filtering for unique rows works fine

matrix <- acast(test.set, cluster.id ~ letters)
matrix
#  A B C D E
#2 1 0 0 0 1
#3 1 0 1 1 1
#4 1 2 0 0 0

【问题讨论】:

  • table(test.set)

标签: r casting grouping dcast


【解决方案1】:

如果我们也查看消息,输出上方会有一条消息

缺少聚合函数:默认为长度

为了得到相似的输出,指定fun.aggregate

acast(test.set.unique, cluster.id ~ letters, length)
#  A B C D E
#2 1 0 0 0 1
#3 1 0 1 1 1
#4 1 1 0 0 0

当存在重复元素时,默认情况下会为length 触发fun.aggregate。使用unique 元素,不指定fun.aggregate,它将假定value.var 列并填充该列的值以获得OP 帖子中的输出

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    相关资源
    最近更新 更多