gpt4 book ai didi

r - 在因子组合中添加缺失的行

转载 作者:行者123 更新时间:2023-12-04 08:21:30 27 4
gpt4 key购买 nike

我有一个可能最好近似为的数据框:

library(data.table)
z <- rep("z",5)
y <- c(rep("st",2),rep("co",2),"fu")
var1 <- c(rep("a",2),rep("b",2),"c")
var2 <- c("y","y","y","z","x")
transp <- c("bus","plane","train","bus","bus")
sample1 <- sample(1:10, 5)
sample2 <- sample(1:10, 5)
df <- cbind(z,y,var1,var2,transp,sample1,sample2)
df<-as.data.table(df)
> df
z y var1 var2 transp sample1 sample2
1: z st a y bus 4 3
2: z st a y plane 10 7
3: z co b y train 8 9
4: z co b z bus 1 5
5: z fu c x bus 6 4

表中已存在 var1 和 var2 的所有唯一组合。我想扩展表格,以便 var1/var2 的所有组合都包含列表中的所有 transp 选项:

transtype <- c("bus","train")

注意“plane”是 df 中的一个选项,但不是 transtype。我想保留包含 transp="plane"但不通过添加带有“plane”的行来扩展的行。 z 和 y 列需要填写适当的值,并且 sample1 和 sample2 应该是 NA。结果应该是:

    > result
z y var1 var2 transp sample1 sample2
1: z st a y bus 4 3
2: z st a y plane 10 7
3: z st a y train NA NA
4: z co b y train 8 9
5: z co b y bus NA NA
6: z co b z bus 1 5
7: z co b z train NA NA
8: z fu c x bus 6 4
9: z fu c x train NA NA

我根据 Fastest way to add rows for missing values in a data.frame? 提出的 data.table 选项和 Data.table: Add rows for missing combinations of 2 factors without losing associated descriptive factors最终扩展 var1 和 var2 的所有唯一组合,而不仅仅是表中已经存在的组合。而且我不知道如何保持 z 和 y 的值。像这样:

setkey(df, var1, var2, transp)
x<-df[CJ(var1, var2, transp, unique=T)]

也许我应该使用 dplyr?或者,也许我错过了一些简单的东西?我浏览了 data.table 文档,但找不到解决方案。

最佳答案

要仅获取 df 中已经存在的唯一组合,最好使用 by 创建一个新的引用 data.table,然后将其与原来的。

使用:

df2 <- df[, .(transp = transtype), by = .(var1,var2)]
merge(df, df2, by = c('var1','var2','transp'), all = TRUE)

给予:

   var1 var2 transp  z  y sample1 sample2
1: a y bus z st 4 3
2: a y plane z st 10 7
3: a y train NA NA NA NA
4: b y bus NA NA NA NA
5: b y train z co 8 9
6: b z bus z co 1 5
7: b z train NA NA NA NA
8: c x bus z fu 6 4
9: c x train NA NA NA NA

如果您的 zy 列没有 NA-值,您可以这样做:

df2 <- df[, .(transp = transtype), by = .(var1,var2,z,y)]
merge(df, df2, by = c('var1','var2','transp','z','y'), all = TRUE)

给出:

   var1 var2 transp z  y sample1 sample2
1: a y bus z st 4 3
2: a y plane z st 10 7
3: a y train z st NA NA
4: b y bus z co NA NA
5: b y train z co 8 9
6: b z bus z co 1 5
7: b z train z co NA NA
8: c x bus z fu 6 4
9: c x train z fu NA NA

注意:如果 zy 列对于每个 var1/var2 有多个唯一值组合,最好使用 zoo 包中的 na.locf 来填充 z 中的 NA-values > 和 y 列。


使用过的数据:

df <- fread("z  y var1 var2 transp sample1 sample2
z st a y bus 4 3
z st a y plane 10 7
z co b y train 8 9
z co b z bus 1 5
z fu c x bus 6 4")

关于r - 在因子组合中添加缺失的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44458911/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com