R: Как добавить строку, у которой количество столбцов отличается от остального фрейма данных? - PullRequest
0 голосов
/ 31 мая 2018

У меня есть фрейм данных, который выглядит следующим образом:

set <- data.frame("id"=c("one", "two","three"), "line_number"=c("1", "2", "3"), 
              "content_type"=c("paragraph", "paragraph","paragraph"), 
              "text"=c("this is a sample","first batch is:", "second batch is:"), 
              "section"=c("introduction","content","summary"))

Так это выглядит так:

  set(view)
  id       line_number      content_type     text                   section
  one           1            paragraph       this is a sample     introduction
  two           2            paragraph       first batch is:        content
  three         3            paragraph       second batch is:       summary

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

  set(view)
  id       line_number      content_type     text                   section
                                             Sample Report
  one           1            paragraph       this is a sample     introduction
  two           2            paragraph       first batch is:        content
  three         3            paragraph       second batch is:       summary

И R может просто автоматически заполнять NA, где это необходимо.

Я пытаюсь использовать rbind, но это не позволяет мнесделать это, потому что номера столбцов не совпадают.Есть ли другой способ сделать это?Может быть, петля?

Спасибо!Я действительно ценю это.

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

база R

set2[setdiff(names(set),names(set2))] <- NA
rbind(set2,set)
#               text    id line_number content_type      section
# 1    Sample Report  <NA>        <NA>         <NA>         <NA>
# 2 this is a sample   one           1    paragraph introduction
# 3  first batch is:   two           2    paragraph      content
# 4 second batch is: three           3    paragraph      summary

или для одного вкладыша, который не изменяется set2:

rbind('[<-'(set2,setdiff(names(set),names(set2)),value= NA),set)

dplyr

dplyr::bind_rows(set2,set)
#               text    id line_number content_type      section
# 1    Sample Report  <NA>        <NA>         <NA>         <NA>
# 2 this is a sample   one           1    paragraph introduction
# 3  first batch is:   two           2    paragraph      content
# 4 second batch is: three           3    paragraph      summary

data.table

data.table::rbindlist(list(set2,set),fill=TRUE)
#                text    id line_number content_type      section
# 1:    Sample Report    NA          NA           NA           NA
# 2: this is a sample   one           1    paragraph introduction
# 3:  first batch is:   two           2    paragraph      content
# 4: second batch is: three           3    paragraph      summary

примечание по порядку столбцов

Порядок столбцов определяетсяпервый data.frame, поэтому столбец text был перемещен влево.Добавьте [names(set)] к любому ответу, чтобы вернуть исходный заказ.

data

set <- data.frame("id"=c("one", "two","three"), "line_number"=c("1", "2", "3"), 
                  "content_type"=c("paragraph", "paragraph","paragraph"), 
                  "text"=c("this is a sample","first batch is:", "second batch is:"), 
                  "section"=c("introduction","content","summary"))

set2 <- data.frame(text ="Sample Report")   
0 голосов
/ 31 мая 2018

Другие альтернативы тому, что уже было дано:

set <- data.frame("id"=c("one", "two","three"), "line_number"=c("1", "2", "3"), 
              "content_type"=c("paragraph", "paragraph","paragraph"), 
              "text"=c("this is a sample","first batch is:", "second batch is:"), 
              "section"=c("introduction","content","summary"), stringsAsFactors = FALSE)
x <- data.frame(text = "Sample Report", stringsAsFactors = FALSE)

с использованием dplyr

library(dplyr)
d1 <- full_join(set,x)
d1 <- d1 %>% arrange(!is.na(line_number),line_number)

Второй шаг поможет вам получить «Образец отчета» в первой строке.

с использованием базы R

d2 <- merge(set,x,all = T)
d2 <- d2[order(d2$line_number,na.last=F),]

Опять же, вторая строка кода выше поможет вам получить «Образец отчета» в первой строке.В обоих случаях переменная слияния не указана явно (но R по умолчанию принимает переменные, которые являются общими для обоих наборов данных, то есть переменную text).

0 голосов
/ 31 мая 2018

Это должно сделать это

set <- data.frame("id"=c("one", "two","three"), "line_number"=c("1", "2", "3"), 
                  "content_type"=c("paragraph", "paragraph","paragraph"), 
                  "text"=c("this is a sample","first batch is:", "second batch is:"), 
                  "section"=c("introduction","content","summary"), stringsAsFactors = FALSE)
x <- data.frame(text = "Sample Report", stringsAsFactors = FALSE)
dplyr::bind_rows(set,x )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...