R语言 根据另一行对应的列值向df添加新行

t0ybt7op  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(113)

目前正在分析气候数据,需要找到每个模型(列)达到净零排放的年份(行)。
我做了一个循环来提取负值的第一个示例的 * 值 *,即每个型号的负发射(如照片所示,nz_temp行)。
我现在需要创建一个包含此示例的 year 的行。
任何帮助将不胜感激。
我试着使用拉功能,但完全卡住了!

c9qzyr3d

c9qzyr3d1#

不要把R看作是一个电子表格程序。当你使用R时,考虑列的方式是很重要的。几乎不需要为包含“答案”的任何内容创建新行。
我的建议是创建一组包含负数True/False值的列。然后在它们上面使用下标。
下面是一个小例子,一步一步:

> dput(my.data)
structure(list(Year = c(2000, 2001, 2002), V1 = c(3, -4, -10), 
    V2 = c(-500, -1000, -1200), V3 = c(1, 2, -3)), class = "data.frame", row.names = c(NA, 
-3L))

#> my.data
#  Year  V1    V2 V3
#  2000   3  -500  1
#  2001  -4 -1000  2
#  2002 -10 -1200 -3

# are any values in V1, V2, or V3 less than 0?
my.data$V1.neg.TF <- my.data$V1.neg.TF[my.data$V1.neg.TF][1] < 0 
my.data$V2.neg.TF <- my.data$V2.neg.TF[my.data$V2.neg.TF][1] < 0
my.data$V3.neg.TF <- my.data$V3.neg.TF[my.data$V3.neg.TF][1] < 0

#> my.data
#  Year  V1    V2 V3 V1.neg.TF V2.neg.TF V3.neg.TF
#1 2000   3  -500  1     FALSE      TRUE     FALSE
#2 2001  -4 -1000  2      TRUE      TRUE     FALSE
#3 2002 -10 -1200 -3      TRUE      TRUE      TRUE

请注意True/False值如何指示负值首先出现的位置。
现在我们使用下标:

my.data$Year[my.data$V1.neg.TF][1]

这意味着抓取Year(my.data$Year)的序列,其中有一个负数(my.data$V1.neg.TF),然后返回该向量的第一个元素([1])。
所以你可以

c(
my.data$Year[my.data$V1.neg.TF][1], 
my.data$Year[my.data$V2.neg.TF][1], 
my.data$Year[my.data$V3.neg.TF][1]
)

这就是你想要的2001 2000 2002

相关问题