通过采样单位格式将样本中的数据帧更改为入射频率格式(为iNext入射数据帧准备数据帧)

时间:2017-07-07 23:28:28

标签: r inext

我有一个像这样的数据框:

df<- data.frame(region = c("1","1","1","1","1","2","3","3","3"),
                loc = c("104","104","104","105","105","106","107", "108", "109"), 
                interact = c("A_B","A_B", "B_C", "C_D", "A_B", "E_F", "E_F", "F_G", "A_B"))

我想制作一个数据框:

1)计算每个loc子集在region级别之间发生的给定交互的发生频率。因此,在上面的示例中,在区域1中,有两个loc(104和105)都具有交互A_B。因此,区域1的A_B的发生频率= 2.不计算同一interact中的重复loc级别。因此,虽然A_B在区域1中出现3次,但它仅出现在两个唯一的loc中。发生率频率计算此loc出现的唯一interact级别。

2)新数据帧应该对所有区域中所有可能的interact级别进行矢量化,并计算每个区域的这些级别的发生率。因此,对于在该区域中没有发生的所有交互级别,应该包括0。

3)第一行需要是该地区唯一loc级别的计数。在区域1中,有2个区域水平(104,105),区域21个区域水平(106)和区域3,3个区域水平(107-109)。

最终输出如下:

output<- data.frame(interact = c("","A_B","B_C","C_D","E_F","F_G"),
                    region1 = c("2","2","1","0","1","0"),
                    region2 = c("1","0","0","0","1","0"),
                    region3 = c("3","1","0","0","1","1"))

我不知道从哪里开始,但这是我在Convert from long to wide format counting frequency of eliminated factor level (Prepping dataframe for input into iNEXT Online)发布的类似问题中改编自@akrun的内容,但是出现错误:

library(tidyverse)
df %>%
 group_by(region = paste0('region', region)) %>% 
        summarise(interact = "", V1 = n_distinct(loc)) %>% 
        spread(region, V1),
      df %>% 
        group_by(region = paste0('region', region) & loc),
                interact = as.character(interact)) %>%
        summarise(V1 = length(unique((interact)) %>% 
        spread(region, V1, fill = 0))

1 个答案:

答案 0 :(得分:1)

通过澄清评论(并重新阅读问题),我正在修改我的建议,但它仍在使用base-R方法。试试这个:

 my_table <- with(df, table(interact, loc, region) )
 apply(my_table, c(1,3), function(x){sum(x > 0)}) 
   # 2nd arg to apply ( 1 & 3) give num of pos "loc"'s by interact and region

会给你:

        region
interact 1 2 3
     A_B 2 0 1
     B_C 1 0 0
     C_D 1 0 0
     E_F 0 1 1
     F_G 0 0 1

如果你真的需要重新标记区域维度,那并不是特别困难。这就是我要继续的方式(假设您将该值分配给collapse_tbl

colnames(collapse_tbl) <- 
           paste0 ("region",  attr( collapse_tbl, 'dimnames')$region)
collapse_tbl
        region
interact region1 region2 region3
     A_B       2       0       1
     B_C       1       0       0
     C_D       1       0       0
     E_F       0       1       1
     F_G       0       0       1

这是一个矩阵对象,而不是数据帧。与R'table'-object不同,如果你想在那个类中使用它,你可以使用as.data.frame。处理数据的“自然”方式是使用“长”排列。您仍然可以使用矩阵(或表)对象的常用索引。

> collapse_tbl["F_G", "region3"]
[1] 1

xtabs函数通常用于此目的。 tablextabs都在“原始R-verse”中。

相关问题