r-对dplyr mutate()函数创建的列的引用



下午好,

我是新手,目前正试图使用sparlyr和dplyr库在SPARK中工作,但遇到了一个问题——在使用mutate函数执行转换后(例如,添加列后(,我无法引用这个新创建的列,但这对我未来的计算至关重要。换句话说,我的初始df并没有新创建的列,并且这个列只出现在我所做的转换中。

这里有一个例子:

#Creating a df
block1_value <- c(1000, 1500, 2000, 3000, 3500, 4000, 5000)
block2_value <- c(1, 2, 3, 4, 5, 6, 7)
block3_value <- c("a", "b", "c", "d", "e", "f", "g")
df <- data.frame(block1_value, block2_value, block3_value)
#Using mutate() to add new calculated column
df %>%
mutate(Result = block1_value + block2_value)
#While referencing to this newly created column I do get an error
df %>%
mutate(Result2 = ifelse(Result > 3000, "Yes", "No"))

如何使用dplyr语法解决这个问题(问题是我只能使用dplyr库,因为所有的工作都是Spark(

非常感谢!!

您尚未将突变分配给数据帧。

这适用于

df <- df %>% mutate(Result = block1_value + block2_value)
df <-df %>% mutate(Result2 = ifelse(Result > 3000, "Yes", "No"))

但这是干净高效的。

df <- df %>% mutate(Result = block1_value + block2_value) %>% 
mutate(Result2 = ifelse(Result > 3000, "Yes", "No"))

mutate实际上并不会使变量发生突变。它生成数据帧的修改副本。以下代码之所以有效,是因为%>%运算符将第一个mutate(即修改后的df(的结果转发给第二个mutate

df %>%
mutate(Result = block1_value + block2_value) %>%
mutate(Result2 = ifelse(Result > 3000, "Yes", "No"))

#>  block1_value block2_value block3_value Result Result2
#>1         1000            1            a   1001      No
#>2         1500            2            b   1502      No
#>3         2000            3            c   2003      No
#>4         3000            4            d   3004     Yes
#>5         3500            5            e   3505     Yes
#>6         4000            6            f   4006     Yes
#>7         5000            7            g   5007     Yes

最新更新