【发布时间】:2017-11-10 23:49:57
【问题描述】:
我想知道是否有人可以帮助我编写一个函数来执行此操作。我有一个如下所示的数据框:
df <- data.frame(TestA1 = c(1,2), TestA2 = c(2,3), TestB1 = c(3,4), TestB2 = c(5,6), A = c(1,1), B = c(2,2))
df
TestA1 TestA2 TestB1 TestB2 A B
1 2 3 5 1 2
2 3 4 6 1 2
我想从名称中包含 A 的所有其他列(即 TestA1 和 TestA2)中减去“A”列,并对 B 及其匹配列执行相同操作。在一个功能中尝试和做这件事太多了吗?
我还是 R 新手,我一直在我的数据集上逐个进行此操作,它似乎非常低效(完整数据集为 25000x55)。我一直在努力思考如何编写一个函数来做到这一点,并且一直在苦苦挣扎。任何帮助/指导将不胜感激!
编辑
理想的输出是(如果选择 B)
NewTestB1 NewTestB2
1 3
2 4
因此,B = c(2,2) 将从匹配的每一列中减去,从而生成一个输出数据帧,其中包含已选择的列和额外的调整。
【问题讨论】:
-
一列是否可以同时是 A 和 B?你是说你事先不知道列名,必须搜索匹配项?
-
不,列不可能同时存在。我事先知道列名我只是希望能够编写它,以便我可以匹配需要从其他列中减去的列作为匹配名称的组成部分,而不需要分成几个较小的数据框
-
使用 names() 获取名称,然后 grepl() 为 A 和 B 获取名称。然后做减法 Avars - A .
-
根据上述:library(dplyr) df %>% select(grep("A", names(df)))