首页 > 解决方案 > 向 R 中的 data.table 添加其他行,其中仅包含某些列的值

问题描述

基本上,我有一个混合了日期、证监会、字符串和数字数据的 data.table,我想添加额外的行,其中只有三列有数据,我希望其余的为空。所以我问如何在使用 dt[x:y, A=c(...)] 等交换值之前向我的 data.table 添加空行。或者有更好的方法吗?

这是我的数据示例:

#Required packages
require(data.table)
require(sf)

#Data
ID<-c(1:3)
lon<-c(-86.9655633, -85.8316318, -85.8316318)
lat<-c(34.5967589, 33.6598257, 33.6598257)
Country<-c("Malaysia", "Malayisia", "Singapore")
City<-c("Penang", "Malacca", "Singapore")
area_km2<-c(1048, 277, 728)
event_start<-as.Date(c("2000-01-31", "2000-09-21", "2001-03-17"))
event_end<-as.Date(c("2000-02-14", "2000-10-12", "2001-05-27"))

samp<-data.table(ID, lon, lat, Country, City, area_km2, event_start, event_end)
samp <- st_as_sf(samp, coords = c("lon", "lat"), na.fail=F)

我想要的本质上是添加更多包含国家、城市和地区的数据行,但其他所有内容都为空

add_Country<-c("Indonesia", "Indonesia", "Myanmar")
add_City<-c("Solo", "Jakarta", "Yangon")
add_area_km2<-c(44, 662, 576)
add<-data.table(add_Country, add_City, add_area_km2)

这是我迄今为止尝试直接附加值并尝试添加空行的方法


require(tibble)

samp %>% add_row(Country = as.vector(add$add_Country), 
                        City = as.vector(add$add_City), 
                        area_km2= as.vector(add$add_area_km2))
empty=matrix(c(rep.int(NA,length(samp))),nrow=nrow(add),ncol=length(samp))  
colnames(empty) = colnames(samp)  
rbind(samp, empty)

这是我第一次发帖,所以请让我知道如何更清楚。谢谢!

标签: rdata.tabledata-cleaning

解决方案


只是直接用函数绑定两个data.table 。rbindlist

首先,您需要构造具有相同列名的添加部分samp

samp<-data.table(ID, lon, lat, Country, City, area_km2, event_start, event_end)

Country<-c("Indonesia", "Indonesia", "Myanmar")
City<-c("Solo", "Jakarta", "Yangon")
area_km2<-c(44, 662, 576)
add<-data.table(Country, City, area_km2)

然后将它们绑定在一起,注意选项fill = TRUE

rbindlist(list(samp,add),fill = TRUE)

推荐阅读