【问题标题】:Add list to column in data frame in R, while also adding NA to the other columns将列表添加到 R 数据框中的列,同时将 NA 添加到其他列
【发布时间】:2021-08-12 08:28:07
【问题描述】:
我有一个这样的数据框:
>head(NameFrame)
name married age
1 James Yes 34
2 Sarah No 22
3 John Yes 55
我有一个这样的列表:
>head(NameList)
[1] "Kyle", "Bob"
如何将此列表添加到数据框中,以便数据框如下所示:
name married age
1 James Yes 34
2 Sarah No 22
3 John Yes 55
4 Kyle NA NA
5 Bob NA NA
任何帮助将不胜感激!
【问题讨论】:
标签:
r
list
dataframe
append
【解决方案1】:
还有data.table rbindlist -
data.table::rbindlist(list(NameFrame, data.frame(name = NameList)), fill = TRUE)
# name married age
#1: James Yes 34
#2: Sarah No 22
#3: John Yes 55
#4: Kyle <NA> NA
#5: Bob <NA> NA
【解决方案2】:
我们可以这样做
NameFrame[nrow(NameFrame) + seq_along(NameList), "name"] <- NameList
给了
> NameFrame
name married age
1 James Yes 34
2 Sarah No 22
3 John Yes 55
4 Kyle <NA> NA
5 Bob <NA> NA
数据
> dput(NameFrame)
structure(list(name = c("James", "Sarah", "John"), married = c("Yes",
"No", "Yes"), age = c(34L, 22L, 55L)), class = "data.frame", row.names = c("1",
"2", "3"))
> dput(NameList)
c("Kyle", "Bob")
【解决方案3】:
我们可以使用bind_rows,如果我们使用命名为list 或tibble/data.frame 的'NameList' 中的键/列名称为name,则会生成缺失的列NA
library(dplyr)
bind_rows(NameFrame, tibble(name = NameList))
注意:根据显示的值,“NameList”似乎是 vector 而不是 list)
或者在base R 和rbind
rbind(NameFrame, data.frame(name = NameList, married = NA, age = NA))