【发布时间】:2021-06-13 05:10:17
【问题描述】:
我正在尝试编写一个函数来处理多个相似的数据集,这里我想用上一次面试中同一主题获得的分数减去第二次面试中受试者获得的分数。在我要处理的所有数据集中,感兴趣的分数将存储在第二列中。为每个特定的数据集编写很简单,只需使用确切的列名,一切都会好起来的。
d <- a %>%
arrange(by_group=interview_date) %>%
dplyr::group_by(subjectkey) %>%
dplyr::mutate(score_change = colname_2nd-lag(colname_2nd))
但由于我需要一个可用于处理多个数据集的通用函数,因此我不能使用确切的列名。所以我尝试了3种方法,它们都只改变了最后一行
方法#1:
dplyr::mutate(score_change = dplyr::vars(2)-lag(dplyr::vars(2)))
方法#2: 感兴趣的数据集的第二列名称包含相同的字符串,所以我尝试了
dplyr::mutate(score_change = dplyr::vars(matches('string'))-lag(dplyr::vars(matches('string'))))
上述两种方法的错误信息将是
Error in dplyr::vars(2) - lag(dplyr::vars(2)) :
non-numeric argument to binary operator
方法#3:
dplyr::mutate(score_change = .[[2]]-lag(.[[2]]))
错误信息:
Error: Column `score_change` must be length 2 (the group size) or one, not 10880
10880 是我的示例数据集的行号,所以看起来 group_by 在这种方法中不起作用
有谁知道如何使函数以所需的方式执行?
【问题讨论】:
-
data.frames 是否总是以相同的列顺序导入?然后,您可以在每种情况下将 data.frames 命名为相同,例如col1,领先,滞后
-
是的,这可能是一种方法,但我仍然想学习如何在不使用确切列名的情况下改变分组数据。这次我可以通过重命名列来做到这一点,但下次我可能无法这样做
-
您是否知道每种情况下第二列的名称,但它会有所不同?还是您只知道要更改第二列?
-
我知道第二列的名称,但它会有所不同。但我也想知道如何处理你描述的第二种情况