我有一个名为“data”的列表,它由10个元素(列表)组成,每个元素(列表)有不同数量的元素,例如
lengths(data)
[1]26 33 3 20 22 21 17 18
因此,我们列表的第一个元素由26个元素组成,第二个元素由33个元素组成,以此类推...例如,这些元素中的每一个都是 Dataframe (“tibbles”),具有6列(前四个是整数,第五个是逻辑,最后一个是字符
colnames(data[[1]][[1]])
[1]“宽度”“高度”“x”“y”“空格”“文本”
尽管 Dataframe (列)的结构在组内外是一致的,但即使在组内,每个 Dataframe 的行数也不同。
我想为同一元素中分组的 Dataframe 找到一个模式“高度”。
因此,第一个元素中的26个 Dataframe 有共同的模式,以此类推。换句话说,我想将第一个元素中的26个 Dataframe 的数据分组,计算模式,然后将结果作为新列写入每个 Dataframe ,以便我可以对高度高于、低于和等于模式的行执行不同的操作。
这是我到目前为止得出的结论,尽管它不正确,但在大多数情况下应该会产生相同的结果:
getmode <- function(v) {
uniqv <- unique(v)
uniqv[which.max(tabulate(match(v, uniqv)))]
}
mode <- lapply(data, function(x) lapply(lapply(x, '[[',
'height'), getmode)) # find mode height for each
# paper and each page
mode2 <- lapply(mode, function (x) getmode(x))
# find mode for each paper
1条答案
按热度按时间huus2vyu1#
这里有一个选项,我们使用
map
循环外部列表,然后使用bind_rows
(来自dplyr
)将内部列表元素绑定到单个数据,创建列grp
,将getmode
应用于组合的“height”列以创建新列,然后按“grp”列拆分数据集或者用
lapply
循环list
,用sapply
循环内部列表,从各个内部列表元素中提取“height”,应用getmode
并返回一个模式值向量,在该向量上再次应用getmode
。数据