gpt4 book ai didi

R:将包含类似 Excel 的相对引用的函数应用于其他列

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

dplyr 具有laglead 函数来访问表中的前后。我正在寻找跨的类似功能。

例如,这是一张表:

library(tidyverse)
df <- data.frame('score1' = 1:5, 'score2' = 10:6, dif21 = NA_integer_,
'score3' = 11:15, 'score4' = 20:16, dif43 = NA_integer_)
#      score1 score2 dif21 score3 score4 dif43
# 1 1 10 NA 11 20 NA
# 2 2 9 NA 12 19 NA
# 3 3 8 NA 13 18 NA
# 4 4 7 NA 14 17 NA
# 5 5 6 NA 15 16 NA

该表具有重复两次的列模式:两列分数,后跟一个空的“dif”列,用于保存计算值。

我可以使用 mutate_at 对“dif”列进行操作:

df_calc <- df %>% 
mutate_at(
vars(dif21),
~ score2 - score1
) %>%
mutate_at(
vars(dif43),
~ score4 - score3
)
#     score1 score2 dif21 score3 score4 dif43
# 1 1 10 9 11 20 9
# 2 2 9 7 12 19 7
# 3 3 8 5 13 18 5
# 4 4 7 3 14 17 3
# 5 5 6 1 15 16 1

这让我在“dif”列中得到了我想要的计算分数。一般来说,公式是用“dif”左边的第一列减去“dif”左边的第二列。这种相对列引用在 Excel 中很容易处理,但我不知道如何在 R 中处理。

实际应用是一个有很多列的表,所以用一个公式加上相对列引用的方法效率会很高。

在此先感谢您的帮助!

最佳答案

这是一个baseR选项

idx <- which(startsWith(names(df), "dif"))
df[idx] <- df[idx - 1] - df[idx - 2]

结果

df
# score1 score2 dif21 score3 score4 dif43
#1 1 10 9 11 20 9
#2 2 9 7 12 19 7
#3 3 8 5 13 18 5
#4 4 7 3 14 17 3
#5 5 6 1 15 16 1

思路是先获取以“dif”开头的列的位置。

然后我们只需从每个“dif”列左侧的第一个位置的列中减去每个“dif”列左侧的两个位置的列。

关于R:将包含类似 Excel 的相对引用的函数应用于其他列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56228549/

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