gpt4 book ai didi

R:根据因素身份将两行分组为新行

转载 作者:行者123 更新时间:2023-12-02 00:11:15 25 4
gpt4 key购买 nike

在一个大型数据框中,我试图创建一个新行,根据另一个因素的身份对来自其他行的特定数据进行分组。以下是一些示例数据:

> Species    Status    Value
> A Introduced 10
> A Native 3
> B Crypt 6
> C Introduced 19
> C Native 4

对于每个物种,我想创建一个新行,它只获取状态“引入”或“地穴”的数据,而忽略“本地”状态中的数据。每个物种要么只有“引进”和“本地”的数据,要么只有“地穴”的数据。

因此,我想要的输出将如下所示:

> Species    Status    Value
> A Introduced 10
> A Native 3
> A IC.Total 10
> B Crypt 6
> B IC.Total 6
> C Introduced 19
> C Native 4
> C IC.Total 19

for 循环是解决此问题的最佳方法,还是有更优雅的方法?任何建议都将非常感谢您的帮助!

最佳答案

下面使用data.table包。
假设您的原始 data.frame 名为 myDat:

library(data.table)
myDT <- data.table(myDat, key="Species")

# Creates a new DT, of only the Speices column
myDT2 <- setkey(unique(myDT[, list(Species)]), "Species")

# Add IC.Total values
myDT2[myDT[Status=="Introduced"], c("Status", "ValueC") := list("IC.Total", Value)]

# Add Crypt values
myDT2[myDT[Status=="Crypt"], c("Status", "ValueC") := list("Crypt", Value)]

# fix the column name
setnames(myDT2, "ValueC", "Value")

# combine and sort by speicies
myDT <- setkey(rbind(myDT, myDT2), "Species")

myDT
# Species Status Value
# 1: A Introduced 10
# 2: A Native 3
# 3: A IC.Total 10
# 4: B Crypt 6
# 5: B Crypt 6
# 6: C Introduced 19
# 7: C Native 4
# 8: C IC.Total 19

请注意,如果您不想复制 crypt 计数,只需删除上面的那一行。

关于R:根据因素身份将两行分组为新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15207974/

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