Question:
下面的方法很管用,但有没有更好的"R方法"来达到类似的结果呢?我实际上是在try 根据用户定义的函数(目前仅使用循环)将组创建/分发到单个行项目中.
Example:
df1 <- data.frame(group = c("A", "B", "C"),
volume = c(200L, 45L, 104L)
)
print(df1)
#> group volume
#> 1 A 200
#> 2 B 45
#> 3 C 104
我希望根据组将volume
分成多行,以便最终结果是一个数据帧,其中新卷(下图中的vol2
)将与上面的原始卷相加.在本例中,我应用的是除数为52的整数数学,因此我的最终结果应该是:
print(df3)
#> group vol2
#> 1 A 52
#> 2 A 52
#> 3 A 52
#> 4 A 44
#> 21 B 45
#> 31 C 52
#> 32 C 52
这很管用
下面的代码将使我获得上面所示的预期结果:
div <- 52L
df1$intgr <- df1$volume %/% div
df1$remainder <- df1$volume %% div
print(df1)
#> group volume intgr remainder
#> 1 A 200 3 44
#> 2 B 45 0 45
#> 3 C 104 2 0
df2 <- data.frame()
for (r in 1:nrow(df1)){
if(df1[r,"intgr"] > 0){
for (k in 1:as.integer(df1[r,"intgr"])){
df1[r,"vol2"] <- div
df2 <- rbind(df2, df1[r,])
}
}
if(df1[r,"remainder"]>0){
df1[r, "vol2"] <- as.integer(df1[r, "remainder"])
df2 <- rbind(df2, df1[r,])
}
}
print(df2)
#> group volume intgr remainder vol2
#> 1 A 200 3 44 52
#> 2 A 200 3 44 52
#> 3 A 200 3 44 52
#> 4 A 200 3 44 44
#> 21 B 45 0 45 45
#> 31 C 104 2 0 52
#> 32 C 104 2 0 52
df3 <- subset(df2, select = c("group", "vol2"))
print(df3)
#> group vol2
#> 1 A 52
#> 2 A 52
#> 3 A 52
#> 4 A 44
#> 21 B 45
#> 31 C 52
#> 32 C 52
作为R的新手,我只是好奇是否有人知道更好的方法/函数/方法可以到达相同的位置.看起来可能有.我可能有一种更复杂的方法来分解行,我在想也许有一种方法可以将UDF应用到DataFrame来做这样的事情.我在搜索"扩展组/组",但找到的主要是"expand.grid",这不是我在这里要做的.
谢谢您的建议!