我在 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 中,您可以使用 match
和 unique
来查找组,ave
使用 seq_along
获取 count 和 strsplit
使用 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/