问题描述
我基本上想做 r 中 here 所描述的
示例数据
// Current mongoess Schema
const budgetSchema = new mongoose.Schema(
{
User: "",Data: [{
Name: "",Amount: "",Rate: "",Instalment: ""
}]
}
);
// Current DataBase Structure on MB cloud
{"_id":{"$oid":"609b4b48b3c9200618da3289"},"User":"1","Data":[{"_id":{"$oid":"609b4b48b3c9200618da328a"},"A":"Test1","B":"Test2","C":"Test3","D":"Test4"}]
}
//Node Code to push
const updateArr = await Model.updateOne({
_id: "609b4b48b3c9200618da3289"
},{
'$push': {
'New': "",'New': "",}
});
// Expected Results
{"_id":{"$oid":"609b4b48b3c9200618da3289"},"Data":
[{"_id":{"$oid":"609b4b48b3c9200618da328a"},"D":"Test4"},{"_id":{"$oid":"newID"},"New":"","New":""}]
}
这是我希望输出的样子 - 作为记录,实际文件会更大(高达 200k),因此我无法事先定义列数
names<-c("k127_60234","k127_60234","k127_50234","k127_50234")
values<-c("ko235","ko123","ko543","ko623","ko443","ko123")
df <- data.frame (names,values)
解决方法
我们可以在一行中使用 dcast
library(data.table)
dcast(setDT(df),names ~ paste0('values',rowid(names)))
-输出
# names values1 values2 values3 values4
#1: k127_50234 ko443 ko123 <NA> <NA>
#2: k127_60234 ko235 ko123 ko543 ko623
或者使用 tidyverse
library(dplyr)
library(tidyr)
library(stringr)
df %>%
mutate(nm1 = str_c('values',rowid(names))) %>%
pivot_wider(names_from = nm1,values_from = values)
-输出
# A tibble: 2 x 5
# names values1 values2 values3 values4
# <chr> <chr> <chr> <chr> <chr>
#1 k127_60234 ko235 ko123 ko543 ko623
#2 k127_50234 ko443 ko123 <NA> <NA>
或者使用 base R
do.call(rbind,lapply(unstack(df[2:1]),`length<-`,4))
,
library(tidyverse)
df %>%
group_by(names) %>%
mutate(variable = str_c("values",row_number())) %>%
pivot_wider(names_from = variable,values_from = values)
names values1 values2 values3 values4
<chr> <chr> <chr> <chr> <chr>
1 k127_60234 ko235 ko123 ko543 ko623
2 k127_50234 ko443 ko123 NA NA
在基础 R 中,您可以:
df1 <- transform(df,time = ave(values,names,FUN = seq))
reshape(df1,idvar = "names",dir="wide",sep="")
names values1 values2 values3 values4
1 k127_60234 ko235 ko123 ko543 ko623
5 k127_50234 ko443 ko123 <NA> <NA>
,
这可能会有所帮助:
df %>% tidyr::spread(values,value = values)