我正在尝试根据要更改的列向量修改数据集中的数据。这样我就可以根据配置文件对处理进行分解,配置文件可以将列列表更改为变量。
理想情况下,我希望能够像这样使用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,这不是问题,它只是我最习惯的
答案 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