8

リストからデータ フレームの名前を取得するにはどうすればよいですか? 確かにget()、オブジェクト自体を取得しますが、その名前を別の関数内で使用できるようにしたいと考えています。回避策を提案する場合の使用例を次に示します。

lapply(somelistOfDataframes, function(X) {
    ddply(X, .(idx, bynameofX), summarise, checkSum = sum(value))
})

各データ フレームには、リスト内のデータ フレームと同じ名前の列があります。どうすればこの名前を取得できbynameofXますか? names(X)ベクトル全体を返します。

編集: 再現可能な例を次に示します。

df1 <- data.frame(value = rnorm(100), cat = c(rep(1,50),
    rep(2,50)), idx = rep(letters[1:4],25))
df2 <- data.frame(value = rnorm(100,8), cat2 = c(rep(1,50), 
    rep(2,50)), idx = rep(letters[1:4],25))

mylist <- list(cat = df1, cat2 = df2)
lapply(mylist, head, 5)
4

3 に答える 3

6

この方法でリストの名前を使用します。

dat1 = data.frame()
dat2 = data.frame()
l = list(dat1 = dat1, dat2 = dat2)
> str(l)
List of 2
 $ dat1:'data.frame':   0 obs. of  0 variables
 $ dat2:'data.frame':   0 obs. of  0 variables

そして、次のように lapply + ddply を使用します。

lapply(names(l), function(x) {
    ddply(l[[x]], c("idx", x), summarise,checkSum = sum(value))
  })

これは、再現可能な答えがなければテストされていません。しかし、それは正しい方向にあなたを助けるはずです.

編集 (ran2): 再現可能な例を使用したコードを次に示します。

l <- lapply(names(mylist), function(x) {
ddply(mylist[[x]], c("idx", x), summarise,checkSum = sum(value))
})
names(l) <- names(mylist); l
于 2012-01-25T12:13:17.120 に答える
3

これはdplyrに相当するものです

library(dplyr)

catalog = 
  data_frame(
    data = someListOfDataframes,
    cat = names(someListOfDataframes)) %>%
  rowwise %>%
  mutate(
    renamed = 
      data %>%
      rename_(.dots = 
                cat %>%
                as.name %>% 
                list %>%
                setNames("cat")) %>%
      list)

catalog$renamed %>%
  bind_rows(.id = "number") %>%
  group_by(number, idx, cat) %>%
  summarize(checkSum = sum(value))
于 2015-10-09T03:18:51.297 に答える
1

最初に names(list)->list_name を使用し、次に list_name[1] 、 list_name[2] などを使用して各リスト名を取得できます。(リスト名が数字の場合は、 as.numeric(list_name[x]) も必要になる場合があります。

于 2015-10-09T03:08:08.620 に答える