Введите NA в фрейме данных

Я хотел бы ввести NAs в фрейме данных, установив определенное количество строк. Предположим, мне нужны две строки NAs

Это мой вклад:

df <- "col1 col2 col3"
df <- read.table(text=df, header=T)

> ncol(df)
[1] 3

И ниже мой ожидаемый результат

dfout <- "col1 col2 col3
          NA    NA   NA
          NA    NA   NA"
dfout <- read.table(text=dfout, header=T)

> ncol(dfout)
[1] 3

> nrow(dfout)
[1] 2

Любые идеи? Спасибо


r na
person user2120870    schedule 25.10.2015    source источник


Ответы (2)


Мы реплицируем «NA» 2 раза, то есть требуемые nrows, конвертируем в list, реплицируем «3» на основе количества подстрок в «df», устанавливаем имена «списка» с «df» после извлечения отдельных элементов с помощью scan и преобразовать в 'data.frame'.

data.frame(setNames(rep(list(rep(NA,2)),3), scan(text=df, sep='', what='')))

Преобразование одной строки в небольшие куски для лучшего объяснения.

v1 <- scan(text=df, sep='', what='')#extract individual elements
nR <- 2 #specify the nrows
nC <- length(v1) #ncols based on the length of 'v1'
lst <- rep(list(rep(NA, nR)), nC) #replicate NA.
names(lst) <- v1 #set the 'names' of 'list'
data.frame(lst)  #convert to 'data.frame'

данные

df <- "col1 col2 col3"
person akrun    schedule 25.10.2015

Как насчет

dfout <- df
# dfout[c(1,2),] <- c(NA, NA, NA) # not necessary - see comment below
dfout[c(1,2),] <- NA
dfout
#   col1 col2 col3
# 1   NA   NA   NA
# 2   NA   NA   NA

установив индексы строк dfout во второй строке, вы сможете выполнить эту работу.

person desertnaut    schedule 25.10.2015
comment
Одного NA будет достаточно благодаря переработке. df[c(1, 2), ] <- NA - person Rich Scriven; 25.10.2015
comment
Также df[c(1, 2), ] для этого случая - person alexis_laz; 25.10.2015