gpt4 book ai didi

r - 根据不同列的值在列中搜索

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

我有一个包含三列(“Year”、“Target”、“Value”)的简单表格,我想创建一个包含“Year”的新列 (Resp),其中“Value”高于“Target” ”。选择值(“年”列)对应于“值”第一次高于“目标”的时间。

这是表格的一部分:

db <- data.frame(Year=2010:2017, Target=c(3,5,2,7,5,8,3,6), Value=c(4,5,2,7,4,9,5,8)).
print(db)
Yea Target Value
1 2010 3 4
2 2011 5 5
3 2012 2 2
4 2013 7 3
5 2014 5 4
6 2015 8 9
7 2016 3 5
8 2017 6 8

假装的结果是:

  Year Target Value Resp
1 2010 3 4 2011
2 2011 5 5 2015
3 2012 2 2 2013
4 2013 7 3 2015
5 2014 5 4 2015
6 2015 8 9 NA
7 2016 3 5 2017
8 2017 6 8 NA

有什么建议可以解决这个问题吗?

除了“Resp”列之外,我还想创建一个新列 (Black.Y),其中包含与“Value”的最小值相对应的“Year”,直到“Value”高于“Target”为止。

假装的结果是:

  Year Target Value Resp Black.Y
1 2010 3 4 2011 NA
2 2011 5 5 2015 2012
3 2012 2 2 2013 NA
4 2013 7 3 2015 2014
5 2014 5 4 2015 NA
6 2015 8 9 NA 2016
7 2016 3 5 2017 NA
8 2017 6 8 NA NA

有什么建议可以解决这个问题吗?

最佳答案

这是一种基于 R 的方法:

o <- outer(db$Target, db$Value, `<`)      # compute a logical matrix
o[lower.tri(o, diag = TRUE)] <- FALSE # replace lower.tri and diag with FALSE
idx <- max.col(o, ties.method = "first") # get the index of the first maximum
idx <- replace(idx, rowSums(o) == 0, NA) # take care of cases without greater Value
db$Resp <- db$Year[idx] # add new column

结果表是:

#   Year Target Value Resp
# 1 2010 3 4 2011
# 2 2011 5 5 2013
# 3 2012 2 2 2013
# 4 2013 7 7 2015
# 5 2014 5 4 2015
# 6 2015 8 9 NA
# 7 2016 3 5 2017
# 8 2017 6 8 NA

关于r - 根据不同列的值在列中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44756264/

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