下午好,
我是新手,目前正试图使用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