カラム(df$list
)の成分が異なる長さのリストであるデータフレーム(df
)を持つと、このカラムに関数を適用して結果を新しいカラムに保存する最良の方法は何ですか?リストのリストを扱う最も効率的な方法は?
以下は私が試したことですが、データフレーム(10k行、それほど大きくない)では非常に遅いです。私はこの作業を行うためのより良い代替方法を探しています。
df$new <- apply(df, 1, FUN = function(x) myFunc(x$list))
例:
# constructing df & DF
a <- c(rep("A", 3), rep("B", 3), rep("A",2))
b <- c(1,1,2,4,1,1,2,2)
df <- data.frame(a,b)
DF <- data.frame(c = c(1:8), d = c(8:1))
row.names(DF) <- c("A", "B", "C", "D", "E", "F", "G", "H")
# list of lists
df_red <- aggregate(list(track = 1:NROW(df)), df[,1:2], '[')
df_red$list_1 <- apply(df_red, 1, FUN = function(x) row.names(DF[(x$track),]))
# Function
searchInDF <- function(list){DF[list,]$d}
# apply function on a list of list
df_red$list_2 <- apply(df_red, 1, FUN = function(x) searchInDF(x$list_1))
再現性を指定してください例。 –
異なるデータ構造を作成/変更するのが最適でしょう。リストの列はめったに良い考えではありません。 – Roland
更新 – Rotail