簡體   English   中英

適用於帶有列表列的 data.frame

[英]apply to data.frame with list column

我想將 apply 與包含一列中的列表的 data.frame 一起使用。 也就是說,一列包含向量,我想對這些向量執行各種操作。 例如,我想找出有多少具有特定值的元素。

我這里有什么錯誤?

#reproducible code
set.seed(1)
some_list <- replicate(40, sample(c(1:8), size=sample(3:6, 1), replace=TRUE))
exdf <- expand.grid(id=c(1:10), content=c(1:4))
exdf$dv <- some_list
exdf$edge <- replicate(40, sample(3:5, size=1))

#Prolem: get elements with lesser value than "edge" in "dv"
result <- sapply(dv~., data=exdf, function(x) which(x[, "dv"] < x[, "edge"]))

我們可以使用Map來做列中對應元素的比較

Map(function(x,y) which(x <y), exdf$dv, exdf$edge)

如果我們只對元素的數量感興趣,請使用sum並使用mapply返回一個vector

mapply(function(x,y) sum(x <y), exdf$dv, exdf$edge)

注意: Map只是mapply一個包裝器,它總是返回一個list輸出。

或者另一種選擇是unnest (從tidyr )與dplyr功能

library(dplyr)
library(tidyr)
unnest(exdf, .id = "grp") %>%
        group_by(grp) %>%
        summarise(n = sum(dv < edge))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM