gpt4 book ai didi

r - 如何根据另一行的内容在数据框中创建新行

转载 作者:行者123 更新时间:2023-12-01 12:45:17 26 4
gpt4 key购买 nike

给定

index = c(1,2,3,4,5)
codes = c("c1","c1,c2","","c3,c1","c2")
df=data.frame(index,codes)
df
index codes
1 1 c1
2 2 c1,c2
3 3
4 4 c3,c1
5 5 c2

我怎样才能创建一个看起来像的新 df

df1
index codes
1 1 c1
2 2 c1
3 2 c2
4 3
5 4 c3
6 4 c1
7 5 c2

以便我可以对代码执行聚合?实际数据集的“索引”是一系列时间戳,所以我想按天或小时聚合。

最佳答案

Roland的方法很好,前提是变量索引有唯一键。您可以通过直接使用列表来提高速度。考虑到:

  • 在您的原始数据框中,代码是一个因素。这样做没有意义,您希望它具有个性。
  • 在您的原始数据框中,使用“”代替 NA。由于它的长度为 0,您以后可能会遇到各种麻烦。我会在那里使用 NA 。 ""是一个实际值,""根本没有值,但你想要一个缺失值。因此 NA

所以我的想法是:

数据:

index = c(1,2,3,4,5)
codes = c("c1","c1,c2",NA,"c3,c1","c2")
df=data.frame(index,codes,stringsAsFactors=FALSE)

然后:

X <- strsplit(df$codes,",")
data.frame(
index = rep(df$index,sapply(X,length)),
codes = unlist(X)
)

或者,如果您坚持使用 "" 而不是 NA:

X <- strsplit(df$codes,",")
ll <- sapply(X,length)
X[ll==0] <- NA
data.frame(
index = rep(df$index,pmax(1,ll)),
codes = unlist(X)
)

这两种方法都不假定 index 中的唯一键。它们与非唯一时间戳一起工作得很好。

关于r - 如何根据另一行的内容在数据框中创建新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20684358/

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