gpt4 book ai didi

R:如何根据单元格中的值将数据框中的一行拆分为多行?

转载 作者:行者123 更新时间:2023-12-02 16:31:19 26 4
gpt4 key购买 nike

我有一个如下所示的 data.frame:

id <- c("a","a","a","a","b","b","b","b")
age_from <- c(0,2,3,7,0,1,2,6)
age_to <- c(2,3,7,10,1,2,6,10)
y <- c(100,150,100,250,300,200,100,150)
df <- data.frame(id,age_from,age_to,y)
df$years <- df$age_to - df$age_from

它给出的 df 看起来像:

     id   age_from  age_to     y      years
1 a 0 2 100 2
2 a 2 3 150 1
3 a 3 7 100 4
4 a 7 10 250 3
5 b 0 1 300 1
6 b 1 2 200 1
7 b 2 6 100 4
8 b 6 10 150 4

我不想让每行的年数不相等,而是有 20 行,每个 id 10 行,每行占一年。这还涉及对 y 列中列出的年数的 y 列进行平均。

我相信这可能必须使用循环 1:n 来完成,其中 n 等于 years 列中的值。虽然我不确定如何开始。

最佳答案

您可以使用 rep 按给定的 年数 重复行。

x <- df[rep(seq_len(nrow(df)), df$years),]
x
# id age_from age_to y years
#1 a 0 2 50.00000 2
#1.1 a 0 2 50.00000 2
#2 a 2 3 150.00000 1
#3 a 3 7 25.00000 4
#3.1 a 3 7 25.00000 4
#3.2 a 3 7 25.00000 4
#3.3 a 3 7 25.00000 4
#4 a 7 10 83.33333 3
#4.1 a 7 10 83.33333 3
#4.2 a 7 10 83.33333 3
#5 b 0 1 300.00000 1
#6 b 1 2 200.00000 1
#7 b 2 6 25.00000 4
#7.1 b 2 6 25.00000 4
#7.2 b 2 6 25.00000 4
#7.3 b 2 6 25.00000 4
#8 b 6 10 37.50000 4
#8.1 b 6 10 37.50000 4
#8.2 b 6 10 37.50000 4
#8.3 b 6 10 37.50000 4

当您的意思是对年数的 y 列取平均值除以年数时:

x$y <- x$y / x$years

如果 age_from 应该从 09 并且 age_to1 > 每个 id 到 10:

x$age_from <- x$age_from + ave(x$age_from, x$id, x$age_from, FUN=seq_along) - 1
#x$age_from <- ave(x$age_from, x$id, FUN=seq_along) - 1 #Alternative
x$age_to <- x$age_from + 1

关于R:如何根据单元格中的值将数据框中的一行拆分为多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63451041/

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