Интеркалировать NA с данными в новом фрейме данных - PullRequest
0 голосов
/ 22 января 2019

У меня есть df, как это:

           X1  X2  X3  X4
Number      4   4   4   4
Number.1    2   3   3   2

И я хотел бы преобразовать его в это:

> X1
  NA
   4
   2
  NA
   4
   3
  NA
   4
   3
  NA
   4
   2
  NA

Как я могу вставить NA с моимdf как в примере?До сих пор я пытался с sapply(df, function(x) NA, t(Number(y))), но он возвращает ошибку ... Я знаю, что должен использовать t() для транспонирования моего df, но как добавить NA между столбцами в строках?

Какие-либо предложения?

Примечание: Я не новичок в R, но в последнее время у меня возникли некоторые проблемы ... Я искал во всем StackOverflow, но не смог найти ответ.

Ответы [ 3 ]

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

Вы можете использовать rbind(NA, dat) и unlist с use.name = FALSE - благодаря @ zx8754.

data.frame(X1 = c(unlist(rbind(NA, dat), use.name = FALSE), NA))

Результат

#   X1
#1  NA
#2   4
#3   2
#4  NA
#5   4
#6   3
#7  NA
#8   4
#9   3
#10 NA
#11  4
#12  2
#13 NA

c(..., NA) добавляет NA в конце вектора.

данные

dat <- structure(list(X1 = c(4L, 2L), X2 = c(4L, 3L), X3 = c(4L, 3L), 
    X4 = c(4L, 2L)), .Names = c("X1", "X2", "X3", "X4"), class = "data.frame", row.names = c("Number", 
"Number.1"))
0 голосов
/ 22 января 2019

При выборе строк вне диапазона создается NA строк, затем unlist:

data.frame(X1 = c(NA, unlist(dat[1:3, ], use.names = FALSE)))
#    X1
# 1  NA
# 2   4
# 3   2
# 4  NA
# 5   4
# 6   3
# 7  NA
# 8   4
# 9   3
# 10 NA
# 11  4
# 12  2
# 13 NA
0 голосов
/ 22 января 2019

Вот идея, используя stack во фрейме данных и используя ind и наш групповой индикатор для добавления дополнительных строк, т.е.

s_df <- stack(df)
rbind(data.frame(values = NA, ind = NA), do.call(rbind, by(s_df, s_df$ind, rbind, NA)))[1]

, что дает,

      values
1         NA
X1.1       4
X1.2       2
X1.3      NA
X2.3       4
X2.4       3
X2.31     NA
X3.5       4
X3.6       3
X3.3      NA
X4.7       4
X4.8       2
X4.3      NA

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ Кредиты переходят на этот ответ

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