使用列名作为参数

时间:2017-07-05 14:01:05

标签: r dplyr

我正在尝试根据要更改的列向量修改数据集中的数据。这样我就可以根据配置文件对处理进行分解,配置文件可以将列列表更改为变量。

理想情况下,我希望能够像这样使用ddply:

column <- "var2"
df <- ddply(df, .(), transform, column = func(column))

输出将是相同的数据帧,但在“B”列中,每个字母后面都会添加一个“A”

哪个会通过func更改元素列var2的每个元素(这里func用于以特定方式修剪chr)。我尝试了几种解决方案,例如:

df[do.call(func, df[,column]), ]

不接受df [,column]作为参数(不是列表)或

param = c("var1", "var2")
for(p in param){
    df <- df[func(df[,p]),]
}

破坏其他数据,或

df[, column] <- lapply(df[, column], func)

哪个不起作用,因为它将整个列作为参数,而不是将每个元素1改为1.我对如何使这种处理更加自动化的想法很有用。

示例:

df <- data.frame(A=1:10, B=letters[2:11])
colname <- "B"
addA <- function(text) { paste0(text, "A") }

我想做这样的事情:

df <- ddply(df, .(), transform, colname = addA(colname))

虽然如果解决方案不使用ddply,这不是问题,它只是我最习惯的

1 个答案:

答案 0 :(得分:1)

您可以使用 dplyr 程序包中的mutate_at进行此操作。

library(dplyr)

mutate_at(df, colname, addA)

    A  B
1   1 bA
2   2 cA
3   3 dA
4   4 eA
5   5 fA
6   6 gA
7   7 hA
8   8 iA
9   9 jA
10 10 kA