nrow () возвращает ноль, когда я ссылаюсь на фрейм данных, используя индекс - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь создать цикл for, который создаст новый столбец в каждом из имеющихся у меня фреймов данных, а значение каждой ячейки в столбце равно имени фрейма данных. В любом случае, я сталкиваюсь с этой проблемой, когда пытаюсь использовать цикл for.

dflist <- list(df1, df2, df3, df4) 
dflist_name <- c('df1', 'df2', 'df3', 'df4')

когда я использую это:

nrow(df1)
>1000
nrow(dflist[1])
>NULL

в конце концов я хочу сделать это:

for (i in 1:length(dflist)) {
  cbind(dflist[i], rep(dflist_name[i], nrow(dflist[i])))

Может кто-нибудь помочь объяснить эту проблему?

1 Ответ

0 голосов
/ 26 января 2019

Если вы создаете вложенный df с вашими фреймами данных в столбце и их именами в другом столбце, вы можете использовать функцию unnest в tidyr.Вот пример:

library(tidyverse)

df1 <- data.frame(
  a = rbinom(10, 1, .5),
  b = rbinom(10, 1, .5)
)

df2 <- data.frame(
  c = rbinom(10, 1, .5),
  d = rbinom(10, 1, .5)
)

df3 <- data.frame(
  e = rbinom(10, 1, .5),
  f = rbinom(10, 1, .5)
)

file_names = c('df1', 'df2', 'df3')

dflist <- list(df1, df2, df3) 

df_nest <- data_frame(
  file_contents = dflist,
  file_name = file_names) 

df_all <- unnest(df_nest)

Это даст вам один фрейм данных со столбцом, описывающим имя фрейма данных, из которого поступает каждый объект.

edit: Затем вы можете разделить фрейм данных позначения столбца, если вы хотите отдельные dfs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...