【问题标题】:Transform elements in column with the column name as argument以列名作为参数转换列中的元素
【发布时间】:2017-12-09 06:01:13
【问题描述】:

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

理想情况下,我希望能够像这样使用 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)

这不起作用,因为它将整个列作为参数,而不是逐个更改每个元素。我有点不知道如何使这种处理更加自动化。

例子:

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,那也不是问题,这正是我最习惯的

【问题讨论】:

  • df[,column] &lt;- do.call(func, list(df[,column])) 能得到你想要的结果吗?
  • 这种情况下的问题是该列的所有元素最终都相同,而不是每个都来自“它的”行
  • 你能在你的问题中添加一个最小的例子吗?这将包括您要使用的函数和数据集(或使用内置数据集)和所需的输出。
  • @aosmith : 加了个例子,希望够清楚

标签: r dplyr


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-09
    • 2019-11-02
    • 2014-07-29
    • 2022-11-01
    • 2018-07-20
    • 1970-01-01
    • 2017-07-04
    • 2013-12-12
    相关资源
    最近更新 更多