r - 将一些分组列添加到 R 中的嵌套数据框

标签 r nested data-manipulation

我在 R 中有一个包含 3 列(变量)的数据框。其中之一,称为区域,是某种嵌套的。 我尝试重现它的一小部分。

df <- data.frame (freq = c(70, 72, 74, 76, 78,
                           70, 72, 74, 76, 78,
                           70, 72, 74, 76, 78),
                  region = c('region.1','region.1','region.1','region.1', 'region.1',
                             'region.1.1','region.1.1','region.1.1', 'region.1.1', 'region.1.1',
                             'region.2','region.2', 'region.2', 'region.2', 'region.2'),
                  dBvalue = c(-30, -32, -42, -45, -47,
                              -33, -28, -22, -37, -35,
                              -36, -55, -43, -26, -49))

现在我想添加 3 个新列。 第一个是每个区域的观察计数(因此在本例中为 1...5、1...5 等), 第二个必须包含一个分组值, 最后一个 Ant 应该具有更高层次的 Region 列聚合 在这种情况下,最终的 df 将是:

df <- data.frame (freq = c(70, 72, 74, 76, 78,
                           70, 72, 74, 76, 78,
                           70, 72, 74, 76, 78),
                  region = c('region.1','region.1','region.1','region.1', 'region.1',
                             'region.1.1','region.1.1','region.1.1', 'region.1.1', 'region.1.1',
                             'region.2','region.2', 'region.2', 'region.2', 'region.2'),
                  dBvalue = c(-30, -32, -42, -45, -47,
                              -33, -28, -22, -37, -35,
                              -36, -55, -43, -26, -49),
                  count = c(1,2,3,4,5,
                            1,2,3,4,5,
                            1,2,3,4,5),
                  group = c(1,1,1,1,1,
                            2,2,2,2,2,
                            3,3,3,3,3),
                  higher_region = c("region.1","region.1","region.1","region.1","region.1",
                  "region.1","region.1","region.1","region.1","region.1",
                  "region.2","region.2","region.2","region.2","region.2"))

我正在尝试使用循环函数,但我快疯了。有人有解决办法吗?也许使用替代方法?

最佳答案

Base 中,您可以使用 matchunique 来查找ave 使用 seq_along 获取 countstrsplit 使用 paste 获取 higher_region.

df$group <- match(df$region, unique(df$region))
#df$group <- unclass(factor(df$region)) #Alternative
df$count <- ave(df$group, df$region, FUN=seq_along)
df$higher_region <- sapply(strsplit(df$region, ".", TRUE),
 function(x) paste(x[1:2], collapse = "."))
#df$higher_region <- sub("^([^.]+\\.[^.]*).*", "\\1", df$region) #Alternative
df
#   freq     region dBvalue count group higher_region
#1    70   region.1     -30     1     1      region.1
#2    72   region.1     -32     2     1      region.1
#3    74   region.1     -42     3     1      region.1
#4    76   region.1     -45     4     1      region.1
#5    78   region.1     -47     5     1      region.1
#6    70 region.1.1     -33     1     2      region.1
#7    72 region.1.1     -28     2     2      region.1
#8    74 region.1.1     -22     3     2      region.1
#9    76 region.1.1     -37     4     2      region.1
#10   78 region.1.1     -35     5     2      region.1
#11   70   region.2     -36     1     3      region.2
#12   72   region.2     -55     2     3      region.2
#13   74   region.2     -43     3     3      region.2
#14   76   region.2     -26     4     3      region.2
#15   78   region.2     -49     5     3      region.2

关于r - 将一些分组列添加到 R 中的嵌套数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62192594/

相关文章:

正则表达式删除重复的字符串

javascript - 使用方形 backets 设置嵌套对象的值返回 undefined

从 R 中的数据框中删除一行中的重复元素

r - 如何计算两组数据之间的距离

r - 在 RStudio/RMarkdown 中,如何设置 wd?

r - 将新数据点分配给内核 k-means 中的簇(R 中的 kernlab 包)?

ruby-on-rails - Rails 嵌套表单 -> 根据值进行不同处理

linq-to-sql - 嵌套的 linq-to-sql 查询

mysql - 人为地向 MySQL 结果添加记录

r - 使用 R 对面板数据中横截面单位的值求和